2016-01-23 4 views
0

Ошибка во время рендеринга шаблонаЯ не понимаю эту ошибку Джанго

В шаблоне C: \ Users \ Пэдди \ Desktop \ Django-репетит \ MySite \ блог \ шаблоны \ блог \ post_list.html, ошибка в строке 10 Reverse для 'post_detail' с аргументами '()' и аргументов ключевого слова '{' pk ':' '}' не найден. 1 образец (ы) пробовал: [ 'блог/пост/(? P [0-9] +)/$']

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

{% block content %} 
    <div class="post"> 
     {% if post.published_date %} 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
     {% endif %} 
     <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1> 

     <!--<h1><a href="">{{ post.title }}</a></h1>--> 

     <p>{{ post.text|linebreaks }}</p> 
    </div> 
{% endblock %} 

Мой post_detail.html файл выглядит следующим образом

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

{% block content %} 
    <div class="post"> 
     {% if post.published_date %} 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
     {% endif %} 
     <h1>{{ post.title }}</h1> 
     <p>{{ post.text|linebreaks }}</p> 
    </div> 
{% endblock %} 

Мой urls.py является

from django.conf.urls import include, url 
    from . import views 

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

и ви ws.py является

from django.shortcuts import render 
from django.utils import timezone 
from django.shortcuts import render, get_object_or_404 
from .models import Post 
def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'blog/post_detail.html', {'post': post}) 
    #Post.objects.get(pk=pk) 
# Create your views here. 

def post_list(request): 
    return render(request, 'blog/post_list.html', {}) 

Спасибо.

+0

заменить 'pk = post.pk' с' post.pk' – v1k45

+0

Спасибо, но без изменений. – Paddy

+0

Это должно заставить его работать, вы уверены, что заменили его в теге url в первом шаблоне? – v1k45

ответ

3

Предполагая, что первый шаблон, который вы опубликовали, post_list.html, вы не отправляете ему никаких переменных контекста.

В post_list зрения - если вы хотите перечислить все сообщения - вы должны добавить:

def post_list(request): 
    posts = Post.objects.all() 
    return render(request, 'blog/post_list.html', {'posts': posts}) 

Затем в post_list.html шаблона вы должны перебрать posts:

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

{% block content %} 
    {% for post in posts %} # iterate over posts 
    <div class="post"> 
     {% if post.published_date %} 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
     {% endif %} 
     <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1> 

     <p>{{ post.text|linebreaks }}</p> 
    </div> 
    {% endfor %} 
{% endblock %} 
+0

Миллион спасибо. – Paddy

1

В сообщении об ошибке сообщается, что он не может найти обратный URL-адрес, если pk - '', пустая строка.

Действительно, нет URL-адреса, который соответствует этому, поскольку регулярное выражение требуется [0-9]+, а пустая строка не соответствует этому. Таким образом, обратное совпадение не может быть найдено.

Причина, по которой pk была пуста, объясняется в другом ответе.

Смежные вопросы