Django Home url установлен в папку

У меня есть проблема, когда я хочу, чтобы мой адрес (локальный или живой) указывал на приложение моих проектов в качестве моей домашней страницы, но каждое изменение, которое я делаю, ломает другие URL. URL моего основного сайта выглядит следующим образом:

urlpatterns = [
    path('admin/', admin.site.urls),
    path("projects/", include("projects.urls")),
    path("blog/", include("blog.urls")),
]

Я пытался изменить path("project/", include("projects.urls")) на path("", include("projects.urls")), что нарушает индекс блога.

Мой блог имеет следующий шаблон:

urlpatterns = [
    path("", views.blog_index, name="blog_index"),
    path("<slug:slug>/", views.blog_detail, name="blog_detail"),
    path("<category>/", views.blog_category, name="blog_category"),
]

А мои проекты:

urlpatterns = [
    path("", views.project_index, name="project_index"),
    path("<slug:slug>/", views.project_detail, name="project_detail"),
    path("project/<tag>/", views.project_tag, name="project_tag"),
]

Конфликт возникает из-за того, что django не знает разницы между:

http://example.com/blog

и

http://example.com/(project_slug_called_blog)

потому что они выглядят функционально идентично, будучи просто строкой.

Вы можете изменить порядок URL, чтобы блог искался первым

urlpatterns = [
    path('admin/', admin.site.urls),
    path("blog/", include("blog.urls")),
    path("", include("projects.urls")),
]

И это должно работать до тех пор, пока проекты не будут называться 'blog'

Или, если это не удается, вы можете сделать URL представления деталей проекта более явным

path("<slug:slug>/view-details", views.project_detail, name="project_detail"),

Лично я бы выбрал второй вариант, поскольку он делает URL более читаемым для человека и, вероятно, является более надежным решением.

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