在模板中使用用户CSS表

时间:2017-10-28 21:41:52

标签: django django-templates

我使用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文件?如果是,为什么不使用?

0 个答案:

没有答案