2017-05-07 8 views
0

Ich habe versucht, dies für eine Weile jetzt herauszufinden, aber ich fühle mich wie ich das Framework nicht gut genug kenne, um dies selbst zu debuggen.NoReverseMatch in Django [Neuling]

Im Grunde erstellen ich eine kleine Blog-Stil-Site und ich versuche, eine Liste von Beiträgen zu erstellen, die auf die Seite verlinken können, um den Beitrag selbst zu lesen.

Ich habe eine for-Schleife in meiner Vorlage:

templates/home.py

<h1>Home Page</h1> 
<p>welcome to the ven home page, {{ username }}!</p> 

<a href="{% url 'users:logout' %}">Click here to log out</a> 
<br> 
<a href="{% url 'posts:create' %}">Click here to create a post</a> 

<h2>Posts:</h2> 

{% for post in posts %} 
    <div> 
    <hr> 
    <a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a> 
    <p>{{post.body}}</p> 
    <p><i>{{post.tags}}</i></p> 
    </div> 
{% endfor%} 

Es ist die Linie <a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a>, die das Problem verursacht. Ich

Reverse for 'show' with keyword arguments '{'id': 1}' not found. 1 
pattern(s) tried: ['posts/(?P<post_id>\\d+)/view/$'] 

den Fehler bekommen hier ist meine Urls Datei

url(r'^$', views.CreateFormView.as_view(), name='create'), 
url(r'^(?P<post_id>\d+)/view/$', views.show_post, name='show') 

Die Methode Verknüpfung erstellen funktioniert

und hier ist die Ansicht, die die Vorlage lädt:

def home(request): 
    if not request.user.is_authenticated: 
     return redirect('users:login') 

    posts = Post.objects.all() 
    username = request.user.username 
    return render(request, 'ven/home.html', {'username': username, 'posts': 
    posts}) 

Wenn mehr Informationen benötigt werden, dann lass es mich wissen und ich werde es zur Verfügung stellen. Alle anderen Antworten haben gesagt, dass dieser Fehler mit dem Namespace zu tun hat, aber es funktioniert gut mit dem create link, also bin ich ratlos.

Vielen Dank im Voraus!

Antwort

0

Die Argumentnamen stimmen nicht überein.

Sie würden wollen
<a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a>

zu

<a href="{% url 'posts:show' post_id=post.id %}"><h4>{{post.title}}</h4></a>

Da sich ändern urls.py die show url als '^(?P<post_id>\d+)/view/$' definiert ist.

+0

Danke! es scheint so einfach zu sein, aber ich habe es komplett übersehen –