我有一个问题,我想我的地址(无论是本地还是生活)指向我的项目应用程序作为我的主页,但我所做的每一个改变都打破了其他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的顺序,以便首先查找blog
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更易于人类阅读,并且可能是一个更健壮的解决方案。