Django项目urls.py报NameError: name 'webexample' is not defined如何解决?
解决Django urls.py中的NameError问题
嘿,我来帮你搞定这个问题!先看看你代码里的几个小问题,咱们一步步来修复:
首先,先看你给出的原代码:
from django.contrib import admin from django.urls import path from webexample import views from django.conf.urls import url, includes urlpatterns = [ path('admin/', admin.site.urls), path('webexample/', include(webexample.views.index)), ]
运行时出现的错误:
File "C:\Users\admin\Desktop\ccc\mysite\mysite\urls.py", line 23
path('webexampsle/', include(webexample.views.index)),
NameError: name 'webexample' is not defined
问题分析
这里有三个明显的问题:
- 拼写错误:错误信息里的路径是
webexampsle(多打了个p),和你原代码里的webexample不一致,这是笔误,得先修正。 include用法错误:include()函数的作用是引入其他URL配置模块(比如app自己的urls.py),而不是直接传入视图函数。你直接把webexample.views.index传给include是不符合用法的。- 未导入
webexample模块:你只导入了from webexample import views,并没有导入webexample本身,所以直接写webexample.views.index会触发NameError——Python找不到webexample这个名称。
解决方案
根据你的需求,分两种情况给出正确写法:
情况1:你的webexample应用有独立的urls.py
如果你的webexample目录下已经创建了urls.py文件(推荐这种方式,符合Django的最佳实践),主urls.py应该这样写:
from django.contrib import admin from django.urls import path, include # 注意这里可以直接从django.urls导入include,不用再用django.conf.urls的url了 urlpatterns = [ path('admin/', admin.site.urls), path('webexample/', include('webexample.urls')), # 传入app的urls模块路径字符串 ]
然后在webexample/urls.py里配置视图映射:
from django.urls import path from . import views urlpatterns = [ path('', views.index), # 这里的空路径对应主urls里的webexample/ ]
情况2:不想单独写app的urls.py,直接在主文件映射视图
如果只是简单的单个视图映射,不需要用include,直接把视图函数传给path的第二个参数即可:
from django.contrib import admin from django.urls import path from webexample import views urlpatterns = [ path('admin/', admin.site.urls), path('webexample/', views.index), # 直接用已导入的views.index ]
额外提示
- 注意Django版本的差异:如果你用的是Django 3.1+,
django.conf.urls.url已经被弃用了,推荐用django.urls.path或者re_path。 - 尽量遵循Django的模块化路由设计,把每个app的路由单独放在自己的
urls.py里,这样项目结构更清晰,便于维护。
内容的提问来源于stack exchange,提问作者Міша Шкаферак
相关产品推荐
相关产品推荐

