Как в 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'

Мой вопрос таков:

  1. Хорошо ли рендерится такая страница или нет?
  2. Правильно ли обрабатывается запрос 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.

Вернуться на верх