Django 3.0 Реверс для имени на основе слагов в urls.py не может быть вызван в шаблоне - PullRequest
0 голосов
/ 26 апреля 2020

Я использую Django 3.0 для создания базового c веб-сайта, и я, очевидно, все еще новичок. Моя проблема в том, что я не могу динамически вызывать DetailView, используя формат {% url 'my_page'%}.

Я создал раздел «О нас», для которого слаг - это «нас», и мой ulrs.py имеет name = "<- slug: slug>" (я подумал, что это неправильно), и получаю NoReverseMatch at /, Реверс для 'about-us' не найден. «about-us» не является допустимой функцией представления или именем шаблона.

У меня есть модель сечения, настроенная следующим образом в models.py :

from django.utils.text import slugify

class Section(models.Model):
    section_title = models.CharField(max_length=200, unique=True)
    section_bg = models.ImageField(upload_to='section-bg')
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.section_title)
        super(Section, self).save(*args, **kwargs)

    def __str__(self):
        return self.section_title 

Соответствующий views.py view:

from django.views.generic.detail import DetailView
from . import models

class SectionView(DetailView):
    template_name = "home/section.html"
    model = models.Section

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

И, наконец, в urls.py :

urlpatterns = [
    ...
    path(r'home/<slug:slug>/', views.SectionView.as_view(), name='<slug:slug>'),
    ...
]

Спасибо за заранее за помощь!

1 Ответ

0 голосов
/ 27 апреля 2020

Измените имя URL на что-нибудь читаемое и значимое (например, name=section_detail) и для ссылки на страницу сведений используйте {% url 'section_detail' slug=object.slug %}.

...