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

Django中使用include()导入urls.py时出现TypeError问题排查

嘿,这个错误我之前在Django 1.11里也踩过坑!让我帮你梳理下可能的问题点:

常见问题排查方向

1. 确认include()的使用格式是否正确

Django 1.11已经不再支持直接通过字符串路径引入其他urls模块,必须用include()包裹目标路径——这是最容易踩的坑!

  • 错误写法(旧版本兼容写法,1.11会触发报错):
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^blog/', 'blog.urls'),  # 直接传字符串路径是错误的!
    ]
    
  • 正确写法:
    from django.conf.urls import include, url  # 必须导入include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^blog/', include('blog.urls')),  # 用include()包裹目标urls模块路径
    ]
    

2. 检查被导入的urls.py本身是否合法

你要引入的那个urls.py文件,必须保证urlpatterns是合法的列表,且每个条目都正确定义了视图:

  • 如果被导入的urls里用了视图字符串(虽然1.11还兼容,但可能引发连锁错误),建议改成导入视图的方式:
    # 错误示例(不推荐的写法)
    urlpatterns = [
        url(r'^post/$', 'blog.views.post_list'),
    ]
    
    # 正确示例
    from . import views
    urlpatterns = [
        url(r'^post/$', views.post_list),
    ]
    
  • 同时要确保被导入的urls里没有语法错误,比如漏写逗号、视图未定义等,这些都会导致Django解析时认为它不是合法的可调用结构。

3. 确认include是否已正确导入

你的代码片段里只写了from django.contrib import admin from dj...,要检查是否完整导入了include:

from django.conf.urls import include, url  # 这行必须有!

如果没导入include就直接使用,可能会触发类型错误(Django无法识别这个方法,进而把传入的路径当成视图处理)。

4. 排查是否混淆了视图和include的用法

有时候会不小心把include的参数写成了视图,比如:

# 错误示例:把视图当成了include的参数
urlpatterns = [
    url(r'^blog/', include(views.post_list)),
]

这种情况会直接触发“view must be a callable”的错误,因为Django会把include(views.post_list)当成视图来解析,而它不符合要求。

总结

最常见的原因就是没有用include()包裹urls模块路径,而是直接传了字符串。你可以先从这个点入手排查,再逐步检查其他可能性,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:43:11