2017-02-15 71 views
0

我在學習Django框架,我在擴展模板部分,我試圖添加一個新模板,當我點擊博客的標題以重定向到(日期/作者/等)的頁面,所以我創建了一個新的視圖views.py和一個新的url到urls.py,但是當我adc的路徑' HREF」希望.html文件中,你會看到,我收到以下錯誤,當我重新加載頁面:Django錯誤:模板呈現期間出錯

NoReverseMatch at /

Reverse for 'blog.views.post_detail' with arguments '()' and keyword arguments '{'pk': 2}' not found. 0 pattern(s) tried: []

Error during template rendering

In template /home/douglas/Documentos/Django/my-first-blog/blog/templates/blog/post_list.html, error at line 9

所以,當我抹去HREF背默認值一切運作良好...我幾乎可以肯定,什麼是錯的HREF線,但我將發佈所有模板相關的文件爲你檢查,如果你需要檢查什麼都讓我知道:

冷杉HTML文件:post_list.html

{% extends 'blog/base.html' %} 

{% block content %} 
    {% for post in posts %} 
     <div class="post"> 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
      <h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1> 
      <p>{{ post.text|linebreaksbr }}</p> 
     </div> 
    {% endfor %} 
{% endblock content %} 

urls.py:

from django.conf.urls import url 
from . import views 
from .models import Post 

urlpatterns = [ 
    url(r'^$', views.post_list), 
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail), 
] 

views.py

from django.shortcuts import render 
from django.shortcuts import render, get_object_or_404 
from .models import Post 
from django.utils import timezone 

def post_list(request): 
    #posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    posts = Post.objects.all() 
    return render(request, 'blog/post_list.html', {'posts': posts}) 

def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'blog/post_detail.html', {'post': post}) 

好球員,我想的是,我希望我沒有忘記我的問題的任何細節... 預先感謝您,任何幫助,歡迎!

回答

1

您需要爲您的網址定義一個名稱。這更好。

urlpatterns = [ 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'), 
] 

這樣,在你的模板,你可以在url標籤使用該名稱

<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1> 

第一信息(含名稱定義URL)

The first argument is a url() name. It can be a quoted literal or any other context variable.

第二信息(在你案例,url無名)

If you’d like to retrieve a namespaced URL, specify the fully qualified name:

{% url 'myapp:view-name' %}

More information here

+0

謝謝你,對我的工作!非常感謝你!! –