我使用Django显示用户上传的静态HTML和CSS文件。 HTML不是问题,但我不能让Django使用上传的CSS实际渲染。
项目结构如下:
volatile
我的主要url.py包含:
my_project
main_app
display_app
my_project
media
user
whatever.html
whatver.css
display_app urls.py是:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^html_uploads/', include('display_app.urls')),
url(r'^', include('main_app.urls')),] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
该观点的相关部分是:
urlpatterns = [
url(r'^(?P<requested>(?:[\w]+\/?)+)$', views.readhtml, name='requested'),]
CSS只包含:
def read_html(request, file_name):
title = 'html_file_title'
body = get_body(file_name)
css_source = 'user/whatever.css'
return render(request, "display_app/base.html",
{'title': title,
'body': body,
'css_source': css_source,
'media_url': settings.MEDIA_URL,}
)
模板看起来像:
body {
background-color: #FFCC66
}
有了这个,我得到了404,因为Django找不到/media/user/whatever.css。
如果我将CSS位置更改为:
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href="{{ media_url }}{{ css_source }}" type="text/css" />
</head>
<body>
{% autoescape off %}
{{ body }}
{% endautoescape %}
</body>
404警告消失,HTML仍然加载,但是CSS被静默忽略。
HTML通过几个函数传递并经过大量修改,因此将其作为字符串传递有意义,但CSS应该直接使用,我希望从模板中加载它。 那里发生了什么?没有得到404警告意味着Django正确定位CSS文件?如果是,为什么不使用?