Django Реверс для 'документа' с ключевыми аргументами {'title': 'computer science'} не найден. 1 образец пробовал - PullRequest
1 голос
/ 27 мая 2020

Я получаю исключение NoReverseMatch, но не вижу своей ошибки.

Файл URL:

url(r'^Demo$', views.demo, name='demo'),
url(r'^Demo/(?P<title>[\w-]+)/$', views.demo_document, name='demo_document'),
url(r'^Document_list$', views.document_list, name='document_list'),

Шаблон:

{% for demotext in demotexts %}
      <li><a href="{% url 'keywordExtraction:demo_document' title=demotext.title %}">{{ demotext.title }}</a></li>
{% endfor %}

Просмотры:

def demo(request):
    demotexts = DemoText.objects.all().order_by('date')
    return render(request, 'keywordExtraction/demo.html', {'demotexts': demotexts})


def demo_document(request, title):
    demotext = DemoText.objects.get(title=title)
    demotexts = DemoText.objects.all().order_by('date')
    return render(request, 'keywordExtraction/demo.html', {'demotext': demotext, 'demotexts': demotexts})

Сообщение:

Реверс для demo_document с аргументами ключевого слова '{' title ':' Computer Science '}' не найдено. Пробовали 1 шаблон (ы): ['KeywordExtraction / Demo / (? P [\ w -] +) / $']

/ views.py в демо

return render (request, 'keywordExtraction / demo. html', {'demotexts': demotexts})

Локальные вары

Variable     Value

demotexts    <QuerySet [<DemoText: DemoText object (4)>, <DemoText: DemoText object (5)>]>

request      <WSGIRequest: GET '/KeywordExtraction/Demo'>

1 Ответ

1 голос
/ 27 мая 2020

[\w-]+ не соответствует пробелам. Этот шаблон используется для заголовков [Django -doc] . Слаг - это способ приятного отображения текста в браузере, поскольку пробел отображается как %20, а дефис - как -.

Чтобы создать слаг, вы можете использовать из SlugField [Django -doc] или AutoSlugField [readthedocs] из django-autoslug пакет [readthedocs] . django-autoslug, вероятно, более удобен.

Вы можете установить его в своей локальной среде с помощью:

pip install <b>django-autoslug</b>

, затем вы можете добавить slug в свою модель:

from autoslug import <b>AutoSlugField</b>

class DemoText(models.Models):
    title = models.CharField(max_length=128, unique=True)
    slug = AutoSlugField(<b>populate_from='title'</b>)

A SlugField по умолчанию также добавит db_index в столбец, чтобы обеспечить быстрое извлечение.

тогда в вашем URL вы можете сопоставить его, возможно, лучше переименовать параметр в slug чтобы избежать путаницы:

url(r'^Demo/(?P<b><slug></b>[\w-]+)/$', views.demo_document, name='demo_document'),

В представлении вы можете сопоставить slug:

def demo_document (request, slug ): demotext = DemoText.objects.get ( slug = slug ) demotexts = DemoText.objects.all (). Order_by ('date') return render (request, 'keywordExtraction / demo. html', {'demotext ': demotext,' demotexts ': demotexts})

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

{% for demotext in demotexts %}
      <li><a href="{% url 'keywordExtraction:demo_document' <b>slug</b>=demotext<b>.slug</b> %}">{{ demotext.title }}</a></li>
{% endfor %}

Вероятно, вам нужно будет снова заполнить базу данных для генерации slug .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...