2016-07-09 28 views
0

I post_create und post_detail Ansichten für meinen Beitrag Modell erstellt habe Django. Ich wollte Slug für neuen Post erstellen, so dass er nach dem Klicken auf einen Post in meiner post_list mit dem Erzeugen eines einzigartigen Slugs zu post_detail umleiten kann. Wenn ich meinen Server ausführe, wird Folgendes ausgelöst: Reverse für 'Details' mit Argumenten '()' und Schlüsselwortargumente '{' Slug ':' '}' nicht gefunden. 1 Muster versucht: ['Deal/(? P \ d +)/$']. Wenn jemand irgendwelche Hinweise darauf hat, was diesen Fehler verursachen könnte, würde ich es sehr schätzen.

views.py:

def deal(request): 
    today = timezone.now().date() 
    queryset_list = Post.objects.active() #.order_by("-timestamp") 

    if request.user.is_staff or request.user.is_superuser: 
     queryset_list = Post.objects.all() 

    query = request.GET.get("q") 

    if query: 
     queryset_list = queryset_list.filter(
       Q(from1__icontains=query)| 
       Q(type_of_truck__icontains=query)| 
       Q(Material_Name__icontains=query) | 
       Q(To__icontains=query)| 
       Q(Material_Type__icontains=query) 
       ).distinct() 

    paginator = Paginator(queryset_list, 2) # Show 25 contacts per page 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 

    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     queryset = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     queryset = paginator.page(paginator.num_pages) 


    context = { 
     "object_list": queryset_list, 
     "from1": "List", 
     "page_request_var": page_request_var, 
     "today": today, 
    } 

    return render(request, 'before_login/deal.html', context) 

def post_create(request): 
    # if not request.user.is_staff or not request.user.is_superuser: 
    # raise Http404 

    form = PostForm(request.POST or None) 

    if form.is_valid(): 
     instance = form.save(commit=False) 
     print(form.cleaned_data.get("from1")) 
     instance.user = request.user 
     instance.save() 
     # message success 
     messages.success(request, "Successfully Created") 
     return HttpResponseRedirect(instance.get_absolute_url()) 

    context = { 
     "form": form, 
    } 
    return render(request, "loggedin_load/post_load.html", context) 

def post_detail(request, slug=None): #retrieve 
    #instance = Post.objects.get(id=1) 
    instance = get_object_or_404(Post, slug=slug) 

    if instance.date > timezone.now().date(): 
     if not request.user.is_staff or not request.user.is_superuser: 
      raise Http404 
    share_string = quote_plus(instance.Material_Type) 

    context = { 
     "from1": instance.from1, 
     "instance": instance, 
     "share_string": share_string 
    } 
    return render(request, "loggedin_load/post_detail.html", context) 

urls.py:

url(r'^deal/$', views.deal, name='deal'), 
url(r'^deal/(?P<slug>[\w-]+)/$', views.post_detail, name='detail'), 

models.py:

class Post(models.Model): 

    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    type_of_truck = models.CharField(max_length=20) 
    date = models.CharField(max_length=20) 
    slug = models.SlugField(unique=True) 
    weight = models.DecimalField(max_digits=5, decimal_places=2) 
    Material_Name = models.CharField(max_length=20) 
    To = models.CharField(max_length=20) 
    Number_Of_Truck = models.CharField(max_length=20) 
    Time = models.CharField(max_length=20) 
    Volume = models.CharField(max_length=20) 
    Material_Type = models.CharField(max_length=20) 
    #updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    objects = PostManager() 

    def __unicode__(self): 
     return self.from1 

    def __str__(self): 
     return self.from1 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"slug": self.slug}) 

    class Meta: 
     ordering = ["-timestamp", "-Time"] 



def create_slug(instance, new_slug=None): 
    slug = slugify(instance.id) 

    if new_slug is not None: 
     slug = new_slug 

    qs = Post.objects.filter(slug=slug).order_by("-id") 
    exists = qs.exists() 

    if exists: 
     new_slug = "%s-%s" %(slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 


def pre_save_post_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 



    pre_save.connect(pre_save_post_receiver, sender=Post) 

deal.html:

{% for obj in object_list %} 


    <td scope="row">{{obj.date}}</td> 
    <td> <a href='{{ obj.get_absolute_url }}'>{{ obj.from1 }}</a><br/></td> 
    <td>{{obj.To}}</td> 
    <td>{{obj.Material_Type}}</td> 
    <td>{{obj.type_of_truck}}</td> 
    <td>{{obj.Number_Of_Truck}}</td> 
    <td>{{obj.weight}}</td> 
    <td>Rs. 55000</td> 
    <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
</tr> 
{% endfor %} 

post_detail.html:

{% load urlify %} 

{% block head_title %} 
{{ instance.from1 }} | {{ block.super }} 
{% endblock head_title %} 



{% block content %} 
<div class='col-sm-6 col-sm-offset-3'> 

<!-- <h1>{{ title }} <small>{% if instance.draft %}<span style='color:red;'>Draft</span>{% endif %} -->{{ instance.from1 }}</small></h1> 
{% if instance.from1 %} 
<p>{{ instance.Material_Type }}</p> 
{% endif %} 

Zurückverfolgungs:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/deal/ 

Django Version: 1.9.7 
Python Version: 3.4.4 
Installed Applications: 
['personal', 
'custom_user', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'crispy_forms', 
'widget_tweaks'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Template error: 
In template C:\Users\sumanth\Desktop\django-custom-user- master\Project\mysite\personal\templates\before_login\deal.html, error at line 78 
Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 68 :  <th>Best Offer</th> 
69 :  <th></th> 
70 :  </tr> 
71 : </thead> 
72 : <tbody> 
73 : <tr> 
74 : {% for obj in object_list %} 
75 : 
76 : 
77 :  <td scope="row">{{obj.date}}</td> 
78 :  <td> <a href=' {{ obj.get_absolute_url }} '>{{ obj.from1 }}</a><br/></td> 
79 :  <td>{{obj.To}}</td> 
80 :  <td>{{obj.Material_Type}}</td> 
81 :  <td>{{obj.type_of_truck}}</td> 
82 :  <td>{{obj.Number_Of_Truck}}</td> 
83 :  <td>{{obj.weight}}</td> 
84 :  <td>Rs. 55000</td> 
85 :  <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
86 :  </tr> 
87 : {% endfor %} 
88 :  <!--<tr> 

Traceback:

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
149.      response = self.process_exception_by_middleware(e, request) 

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\views.py" in deal 
70.  return render(request, 'before_login/deal.html', context) 

File "c:\python34\lib\site-packages\django\shortcuts.py" in render 
67.    template_name, context, request=request, using=using) 

File "c:\python34\lib\site-packages\django\template\loader.py" in render_to_string 
97.   return template.render(context, request) 

File "c:\python34\lib\site-packages\django\template\backends\django.py" in render 
95.    return self.template.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
206.      return self._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
173.   return compiled_parent._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
69.     result = block.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\defaulttags.py" in render 
220.      nodelist.append(node.render_annotated(context)) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
1043.    output = self.filter_expression.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
709.     obj = self.var.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
850.    value = self._resolve_lookup(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _resolve_lookup 
913.        current = current() 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\models.py" in get_absolute_url 
47.   return reverse("posts:detail", kwargs={"slug": self.slug}) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in reverse 
600.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
508.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /deal/ 
Exception Value: Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 
+1

was wie sieht Ihre Template aussehen? – rwx

Antwort

2

Bitte noch einen Blick auf den Fehler haben:

Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': >''}' not found. 1 pattern(s) tried: ['deal/(?P\d+)/$'].

Haben Sie die URL erkennen 'deal/(?P\d+)/$'?

Es scheint, dass diese URL auch den Namen 'detail' hat und in Ihrer vor der post_detail URL definiert ist. Stellen Sie sicher, dass die Namen, die Sie Ihren URLs geben, eindeutig sind.

Ich gehe davon aus, dass, was auch immer Code, den Sie in der Frage enthalten sind, in Ihrem posts App ist.

bearbeiten

Diese bearbeiten, nachdem die Frage mit realen Daten und der Zurückverfolgungs aktualisiert wurde hergestellt ist. Das Problem ist, dass nicht alle Einträge in Ihrem Posts Modell eine slug haben. Daher ist der Kwarg slug leer, wodurch der reverse fehlschlägt. Sie können eine Methode zum Erstellen eines eindeutigen Slugs basierend auf einem anderen Feld in Ihrem Modell Posts jedes Mal definieren, wenn die create-Methode des Modells aufgerufen wird. (Sie werden auch die PostsManager außer Kraft setzen müssen.

Sie auch pk statt slug können Ihre Posts Instanzen nachzuschlagen. pk standardmäßig auf allen Django-Modelle zur Verfügung.

+0

Eigentlich ist es nicht post_list & post_detail in meinem Projekt. Zum besseren Verständnis habe ich in diesem Thread in post_detail statt deal gewechselt. Jetzt ändere ich den tatsächlichen Fehler in der Frage. Bitte sehen Sie es sich an und helfen Sie mir, diesen Fehler zu beheben. – vanam

+0

hat den Fehler geändert? Wie funktioniert das? Bitte posten Sie den tatsächlichen Code und Fehler .. Auch Ihre Frage Beschreibung hat immer noch den tatsächlichen Fehler (wie es sollte) .. –

+0

Ich postete den tatsächlichen Code und Fehler. Schau es dir an, Bruder. – vanam

0

Ich bin nicht sicher, ob u brauchen angeben posts:detail, sollte dies im Modell ausreichend sein. Ihre URLs genannt werden detail so versuchen nur detail.

models.py

def get_absolute_url(self): 
    return reverse("detail", kwargs={"slug": self.slug})