шаблоны не будут работать после добавления миграций - PullRequest
0 голосов
/ 19 октября 2018

Я добавил данные с помощью миграции, и теперь после выполнения migrate и makemigrations я попытался runserver, и везде есть ошибки NoReverseMatch.

Посмотрите на эту ошибку:

NoReverseMatch at /blog/

Reverse for 'blog_post_detail' with keyword
arguments '{'year': 2008, 'month': 9, 'slug': 'django-10-released'}'
not found. 1 pattern(s) tried:
['(?P<year>\\d{4}/)^(?P<month>\\d{1,2}/)^(?P<slug>\\w+)/$']

В Миграции это выглядит так:

POSTS = [
    {
        "title": "Django 1.0 Release",
        "slug": "django-10-released",
        "pub_date": date(2008, 9, 3),
        "startups": [],
        "tags": ["django", "python", "web"],
        "text": "THE Web Framework.",
    },]

Это фактический urlpattern:

    re_path (r'^(?P<year>\d{4}/)'
        r'^(?P<month>\d{1,2}/)'
        r'^(?P<slug>\w+)/$',post_detail,name='blog_post_detail'),

Точно так же каждый шаблон имеет ту же проблему ....

https://www.pinterest.co.uk/pin/402509285443188651/

1 Ответ

0 голосов
/ 19 октября 2018

^ соответствует началу строки, поэтому вы никогда не должны включать его в середину регулярного выражения.Удалите его из строк month и slug.Вы также должны переместить косую черту за пределы названных групп.Если ваши слагы содержат дефисы, тогда вам нужно использовать [\w-]+ вместо \w+.

re_path (r'^(?P<year>\d{4})/'
    r'(?P<month>\d{1,2})/'
    r'(?P<slug>[\w-]+)/$',post_detail,name='blog_post_detail'),

Лично я нахожу это регулярное выражение сложнее, когда оно разбито на несколько строк.Я бы предпочел:

re_path (r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<slug>[\w-]+)/$',
         post_detail,name='blog_post_detail'),
...