Django中使用include()的namespace触发ImproperlyConfiguredError,如何设置app_name?
解决Django中namespace需要app_name的问题
嘿,这个坑我踩过!当你在include()里使用namespace参数时,Django要求必须明确关联一个app_name,这样它才能把这个命名空间和对应的应用路由绑定起来,不然就会抛出你遇到的错误。下面给你两种可行的解决办法:
方法1:在被包含的子路由文件中定义app_name
这是Django官方推荐的做法,最规范也最容易维护:
- 找到你
include()的那个子路由文件(比如你include的是blog.urls,就打开blog/urls.py) - 在文件最顶部(
urlpatterns代码块之前)添加一行代码,设置app_name为你的应用名称(一般和应用文件夹同名,方便识别)
举个例子,你的子路由文件blog/urls.py应该改成这样:
from django.urls import path from . import views # 这里就是要传入的app_name值,和你的应用名保持一致即可 app_name = "blog" urlpatterns = [ path("", views.home, name="home"), path("post/<int:pk>/", views.post_detail, name="post_detail"), # 其他路由规则... ]
这样主路由里的include("blog.urls", namespace="blog")就能正常工作了。
方法2:在include()中直接传入app_name参数
如果你不想修改子路由文件,也可以在主路由的include()里用元组的形式同时指定子路由路径和app_name:
from django.urls import path, include urlpatterns = [ # 用(子路由路径, app_name)的元组来替代单独的子路由字符串 path("blog/", include(("blog.urls", "blog"), namespace="blog")), # 其他主路由规则... ]
这里元组里的第二个元素"blog"就是你要传入的app_name值,同样建议和应用名称保持一致,避免后续混淆。
简单来说,app_name的值就是你这个应用的唯一标识,只要和你在命名空间里使用的名称对应上就行,直接用应用的名字是最省心的选择~
内容的提问来源于stack exchange,提问作者Nelson M
相关产品推荐
相关产品推荐

