You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的urls.py中导入多个视图以避免冲突?

解决Django多模块视图导入冲突问题

你之前尝试的两种方法存在的问题

  1. 第一种导入方式:
    代码中path('horoscopes/leon', horoscopes.views.monday)存在明显笔误——路径指向leon但调用的是monday视图,这会导致请求horoscopes/leon时实际触发的是monday函数,而非预期的leon视图,可能让你误以为视图未被识别。如果模块结构正确(horoscopes和dates都是合法Django App),这种通过模块名调用视图的写法本身不会冲突,问题出在笔误上。

  2. 第二种导入方式:
    你给两个视图模块起了别名horoscopes_views和dates_views,但在urlpatterns中依然使用views.leon和views.monday调用视图,当前作用域中并没有名为views的模块,自然会找不到对应的视图。


三种正确的解决方案

方案一:修正别名导入的调用方式

from django.contrib import admin
from django.urls import path
from horoscopes import views as horoscopes_views
from dates import views as dates_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('horoscopes/leon', horoscopes_views.leon),  # 使用别名调用对应视图
    path('dates/monday', dates_views.monday),        # 使用别名调用对应视图
]

方案二:直接导入具体视图(更直观)

如果视图名称不重复,直接导入单个视图可以避免模块层面的混淆:

from django.contrib import admin
from django.urls import path
from horoscopes.views import leon
from dates.views import monday

urlpatterns = [
    path('admin/', admin.site.urls),
    path('horoscopes/leon', leon),
    path('dates/monday', monday),
]

方案三:使用include拆分路由(Django最佳实践)

当项目App较多时,推荐将每个App的路由独立出来,避免根urls.py过于臃肿:

  1. 根目录urls.py配置:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('horoscopes/', include('horoscopes.urls')),  # 将horoscopes开头的请求转发到对应App的路由
    path('dates/', include('dates.urls')),            # 将dates开头的请求转发到对应App的路由
]
  1. 在horoscopes App下创建urls.py:
from django.urls import path
from . import views

urlpatterns = [
    path('leon', views.leon),
]
  1. 在dates App下创建urls.py:
from django.urls import path
from . import views

urlpatterns = [
    path('monday', views.monday),
]

内容的提问来源于stack exchange,提问作者badcasemoore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:10:36