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 более читаемым для человека и, вероятно, является более надежным решением.