Не переходит по адресу slug
я еще новичок в django и только пытаюсь в нём разбираться и тут возник вопрос. Вроде указал правильно slug, адрес и поведение при переходе, но мне пишет, что не находит шаблон, который в принципе у меня не существует(basic/category_detail.html). Пытался создать этот шаблон(мало ли надо конкретно его создавать), но эффекта, как понимаете не дало. Если можно ответьте развернуто, что где как и почему. Так как заметил, тут умеют разжевать лучше любого руководства.
Сам код :
view.py
class SetsDetailView(DetailView):
model = Category
queryset = Category.objects.filter(slug='sets')
context_object_name = 'sets_detail.html'
urls.py
urlpatterns = [
path('', test_view, name='base'),
path('<str:ct_model>/<str:slug>/', ProductDetailView.as_view(), name='product_detail'),
path('<slug:slug>', SetsDetailView.as_view(), name='sets_detail')
]
templates/sets.html
<a href= {% url "sets_detail" slug='sets' %} class="list-group-item">Cуши</a>
models.py
class Category(models.Model):
name = models.CharField(max_length=255, verbose_name='Имя категории')
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
Ответы (1 шт):
""" Здравствуйте, я тоже учусь.Этот вопрос у меня решен с помощью документации django3.1.Ссылка -https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-display/
Не могу сказать на сколько правильно но все в соответствии с документацией.Давайте по порядку.Мое понимание выглядит так , как я опишу ниже.
Мы имеем модель"""
class Category(models.Model):
name = models.CharField(max_length=255, verbose_name='Имя категории')
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
""" Для просмотра объектов модели нужен список в котором указаны эти объекты и ссылка на просмотр деталей. """
categori/urls.py
from .views import CategoriListView, CategoriDetailView
Список - path('categori/', views.CategoriListView.as_view(), name='categori_list'),
Детали - path('categori/slug:slug/', CategoriDetailView.as_view(), name='categori_detail'),
Создайте 2 файла html путь -- templates /categori/categori_list.html templates /categori/categori_detail.html
templates/имя приложения/имя страницы html
categori/views.py """Класс списка категорий"""
class CategoriListView(ListView):
model = Adres
template_name = 'categori/categori_list.html'
context_object_name = 'categorii' # слово 'categorii' - произвольное.Это слово # - название списка в шаблоне categori_list.html
# по которому вы будете проходить циклом
# for для получения значений.
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
class CategoriDetailView(DetailView):
model = Categori
template_name = 'categori/categori_detail.html'
context_object_name = 'detali'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
templates/categori/categori_list.html
<div>
<p> Можно не указывать в views (context_object_name = 'categorii')
вместо categorii в этом шаблоне поставить object_list</p>
{% for categ in categorii %}
<h5 >Имя категории: {{ categ.name }}</h5>
<a href="/categori/{{ categ.slug }}" >Ссылка</a>
<p>Ссылка работает но как сделать лучше пока не знаю</p>
{% endfor %}
</div>
templates/categori/categori_detail.html
<h2> Категория : {{ detali.name }}</h2>
<p>Слаг: {{ detali.slug }}</p>
Все.Код рабочий. Использую.
