Как в django генерировать динамический url после доменного имени для каждой страницы?
Я создаю сайт-блог, где для каждой статьи я задаю уникальный заголовок. Я хочу, чтобы статья имела url domain_name/<article_title>/
.
Предположим, что у меня есть модель A :
class A(models.Model):
title = models.CharField(max_length=500,unique=True)
файлapp.urls.py :
urlpatterns = [
path('',view.index,name="index"),
path('contact/', contact, name="contact"),
path('about/', about, name="about"),
path('terms-and-conditions/', terms, name="terms_and_conditions"),
path('privacy/', privacy, name="privacy"),
path('<str:title>/', article_details, name="article_details"),
]
У меня есть файл вида следующим образом:
def article_details(request,title):
try:
article = A.objects.get(title=title)
context = {'article':article}
return render(request,"app/article.html",context=context)
except:
return render(request,"app/404.html")
файлproject.urls:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
handler404 = 'clothes.views.view_404'
Мой вопрос таков:
- Хорошо ли рендерится такая страница или нет?
- Правильно ли обрабатывается запрос 404?
То, как делает ОП, нормально, но при желании можно упростить представление article_details
, используя сокращение get_object_or_404
, например
from django.shortcuts import get_object_or_404
def article_details(request,title):
article = get_object_or_404(A, title=title)
Для настройки представления 404 можно использовать обработчики. Вот хороший пример в документации.
Трудно сказать, правильно ли отображает OP, потому что вопрос не показывает, что у OP есть приложение для одежды с view_404
в views.py
.