NoReverseMatch по адресу / blog / 2018 / - PullRequest
0 голосов
/ 22 ноября 2018

Помогите мне, пожалуйста.Я не знаю этой проблемы ...В чем проблема?html code image: введите описание изображения здесь изображение страницы ошибки: введите описание изображения здесь

blog / urls.py

urlpatterns = [
      -- skip --

      # Example: /2018/nov/
      url(r'^(?P<year>\d{4})/$', PostYAV.as_view(), name='post_year_archive'),

      -- skip --
]

blog / views.py

from blog.models import Post
from django.views.generic.dates import --skip--, YearArchiveView, --skip--

-- skip --

class PostYAV(YearArchiveView):
     model = Post
     date_field = 'modify_date'
     make_object_list = True

1 Ответ

0 голосов
/ 22 ноября 2018

Если вы пытаетесь использовать этот URL:

 url(r'^(?P<year>\d{4})/$', PostYAV.as_view(), name='post_year_archive'),

Затем вызовите его из шаблона следующим образом:

{% url 'blog:post_year_archive' year|date:'Y' %}

И представление должно быть таким:

class PostYAV(YearArchiveView):
    model = Post
    date_field = 'modify_date'
    make_object_list = True

    def get(self, request, year, *args, **kwargs):
        post = Post.objects.filter(created__year=year)  # assuming created= models.DateField() or similar

Но , если у вас также есть месяц (как, например, изображение, поделенное с вопросом, попробуйте вот так)

url(r'^(?P<year>\d{4})/(?P<month>\d{2})/$', PostYAV.as_view(), name='post_year_archive'),

Шаблон :

  {% url 'blog:post_year_archive' year|date:'Y' month|date:'m' %}

Просмотр:

class PostYAV(YearArchiveView):
    model = Post
    date_field = 'modify_date'
    make_object_list = True

    def get(self, request, year, month, *args, **kwargs):
        post = Post.objects.filter(created__year=year, created__month=month)  # assuming created= models.DateField() or similar

Произошла ошибка в вашем вопросе, поскольку регулярное выражение URL не совпадало с аргументами, передаваемыми из шаблона.%b показывает локализованный месяц и не соответствует регулярному выражению [a-z]{3}.Поэтому вместо %m месяц будет передан как число, и мы обновили регулярное выражение для месяца, чтобы поймать число, отправленное из шаблона.

...