首页 > 解决方案 > Django "TemplateView" 和 "/media/" url 冲突

问题描述

我正在使用 Django 1.11(不能切换到 2.0)编写一个 SPA,作为后端,从 Django Rest Framework API 获取所有数据,并通过 React 路由路由我的应用程序。

这是我的主要urls.py

urlpatterns = [
    url(r'^api/', include('text_cms.urls')),
    url(r'^api/', include('photos_admin.urls')),
    url(r'^admin/', admin.site.urls),
    url('', TemplateView.as_view(template_name='index.html'),
    ]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是我的settings.py文件:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media-files/'

问题是,特定的 url 设置

url('', TemplateView.as_view(template_name='index.html'),

搞乱了媒体 url,并且用户上传的文件无法通过 url 链接访问,即使它们保存到文件夹,我只是收到 404 错误。当我评论我的“模板作为视图”网址时,将其删除或只是给它另一个地址,例如url('main/') - 一切正常。

我尝试从其他应用程序提供模板并将其注册到主 urls.py 文件中,但它也不起作用

urlpatterns = [
    url(r'^', views.IndexView),
]

视图.py

def IndexView(request):
    return render(request, 'main/index.html', {})

标签: pythondjangodjango-urls

解决方案


url('', TemplateView.as_view(template_name='index.html'),

你错过了一个结束)。看来您的网址格式也不正确。应该

url(r'^$' , TemplateView.as_view(template_name='index.html')),

推荐阅读