2016-07-20 35 views
0

Ich habe ein Modell 'Post' erstellt, in dem ich UUID anstelle von Django eingebauten autogenerated ID verwenden. Im 'Post'-Modell definiere ich ein def get_absolute_url, damit ich es in meiner Vorlage behalten kann. Wenn ich versuche, die Deal-Seite zu bekommen, wirft es einen Fehler auf: NoReverseMatch at/deal/ Reverse für 'Details' mit Argumenten '(UUID (' 086d177f-9071-4548-b5db-1d329078853e '),)' und Schlüsselwort Argumente '{}' nicht gefunden. 1 Muster versucht: ['Deal/(? P \ d +)/$']. Ich würde mich freuen, mir dabei helfen zu können.Python: NoReverseMatch Fehler: Reverse für 'Detail' mit Argumenten '(UUID)' und Schlüsselwortargumente '{}' nicht gefunden. 1 Muster versucht: [''] in Django

Hier ist mein Code:

Models.py:

class Post(models.Model): 
    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 

    def __str__(self): 
     return self.post_id 

    def get_absolute_url(self): 
     return reverse("detail", args=(self.post_id)) 

urls.py:

url(r'^deal/$', views.deal, name='deal'), 
url(r'^deal/(?P<post_id>\d+)/$', views.post_detail, name='detail'), 

Views.py:

def deal(request): 
    queryset_list = Post.objects.active() #.order_by("-timestamp") 
    if request.user.is_staff or request.user.is_superuser: 
     queryset_list = Post.objects.all() 
    context = { 
     "object_list": queryset_list, 
     "post_id": "List", 
    } 
    return render(request, 'before_login/deal.html', context) 

def post_detail(request, post_id=None): 
    instance = get_object_or_404(Post, post_id=post_id) 
    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) 

deal.html:

{% for obj in object_list %} 
    <tr> 
     <td scope="row">{{obj.post_id}}</td> 
     <td> <a href='{{ obj.get_absolute_url }}'>{{ obj.from1 }}</a><br/></td> 
     <td>{{obj.user}}</td> 
    </tr> 
{% endfor %} 
+0

In Ihrem Angebot Vorlage, die Sie die '{% url%} mit 'Tag irgendwo. Du solltest das posten. –

+3

Sie vermissen ein Komma in 'get_absolute_url()': 'args = (self.post_id,)'. – knbk

+0

Ich habe meinen Vorlagencode aktualisiert. Ich verwende {% url%} nirgendwo. – sumanth

Antwort

3

Ihre UUID enthält Buchstaben und Bindestriche, aber Ihre Regex entspricht nur Zahlen (\d+). Sie müssen Ihre Regex ändern Buchstaben und Bindestriche zu erfassen:

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

Vielen Dank Bruh !! – sumanth

0

Für UUID, hier ist der reguläre Ausdruck

url(r'^deal/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/$', views.post_detail, name='detail'),