Django 3 url - 视图必须是可调用的或在include()中为列表/元组
我刚开始学习Python和Django,最近把一个项目从2.x版本迁移到了3.x版本。
我有这段代码:
urlpatterns += [
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
]
但是这段代码给我返回了一个错误:
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
File "/mnt/c/Projekty/GO/.venvs/lib/python3.9/site-packages/django/conf/urls/__init__.py", line 22, in url
return re_path(regex, view, kwargs, name)
File "/mnt/c/Projekty/GO/.venvs/lib/python3.9/site-packages/django/urls/conf.py", line 73, in _path
raise TypeError('view must be a callable or a list/tuple in the case of include().')
TypeError: view must be a callable or a list/tuple in the case of include().
我该怎么修复它呢?请帮帮我。
1 个回答
0
你需要直接操作视图,而不是通过名字来引用它:
from django.views.static import serve
urlpatterns += [
url(
'^media/(?P<path>.*)$',
serve,
{
'document_root': settings.MEDIA_ROOT,
},
),
]
不过,这种做法一开始就不是个好主意。这里的作者想要“绕过”Django在生产环境中不提供静态文件或媒体文件的事实(DEBUG = False
),但这样做是有原因的:通过Django来提供文件在处理时间和内存使用上可能非常低效,而且它也不太会有效利用缓存,最后,视图本身并不是特别安全。
通常情况下,你需要配置像nginx、apache这样的网络服务器来提供这些文件,想了解更多信息,可以查看从专用服务器提供静态文件部分 [Django-doc]。