我正在尝试在为 Django 制作的 HTML 模板文件中添加 .css 和 .js 文件。我已关注 official doc ,所以我的配置设置为:
网址.py
urlpatterns = patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_DOC_ROOT}),
设置.py
STATIC_DOC_ROOT = ''/myfirstapp/templates/seminar_form/'
但我仍然无法正确处理,那些 .css .js 和图像文件仍然没有加载到我的 HTML 中,但是这些文件可以通过点击浏览器上的 URL 来访问(完全可见)
像这样:
http://127.0.0.1:8000/site_media/images/calendar.png
模板代码
<img src="{{ site_media }}images/calendar.png">
最佳答案
如果您可以通过直接在浏览器中点击 URL 来查看文件,那么我猜您已经获得了 MEDIA_URL
设置错误,或者模板代码有问题。你的 HTML 引用你的 CSS/JS/Images 的 URL 是什么?
确保您正在通过您的 MEDIA_URL
因此它可以在模板的上下文中使用,您可以通过将传递给 View 函数的请求包装在 RequestContext
中来实现。 , 像这样:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
如果你有你的
MEDIA_URL
设置正确,并且您正确地提供媒体服务(您的问题表明您是这样)您应该能够使用以下内容访问媒体:<img src="{{ MEDIA_URL }}relative/path/to/media.jpg" alt="Foobar" />
编辑后显示模板代码:
从您的模板代码来看,您似乎正在尝试引用以名为
site_media
的模板变量为根的文件。 ,这可能不存在。你需要把这样的东西放在你的
settings.py
中:MEDIA_URL = u'/site_media/'
然后将您的模板代码更改为如下所示:
<img src="{{ MEDIA_URL }}images/calendar.png">
并确保您通过
MEDIA_URL
从您的 View 功能到您的模板。在评论要求澄清
RequestContext
之后:在线 Django 书籍有一些帮助(尽管目前缺少某些部分)documentation关于
RequestContext
.我个人使用 render_to
来自 django-annoying 的装饰器,以避免不得不考虑它。代替我之前的示例 View 代码,您可以这样做:from annoying import render_to
@render_to('my_template.html')
def some_view(request):
...
return my_data_dictionary
本质上,你只是装饰你的 View 函数,传入你想要渲染的模板,然后只返回一个
dict
包含您想要设置的额外上下文变量(即除了由 RequestContext
为您设置的上下文变量之外的上下文变量,例如 MEDIA_URL
)。如果您的 View 可能根据某些条件使用不同的模板,这种方法显然不起作用,但有一些简单的方法可以解决这个问题:
def some_view(request, some_var):
...
if some_var:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
else:
return render_to_response('my_other_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
可以改写为:
def some_view(request, some_var):
...
if some_var:
return _some_private_view(request, my_data_dictionary)
else:
return _some_other_private_view(request, my_data_dictionary)
@render_to('my_template.html')
def _some_private_view(request, my_data_dictionary):
return my_data_dictionary
@render_to('my_other_template.html')
def _some_private_view(request, my_data_dictionary):
return my_data_dictionary
至少对我来说,这似乎更清楚。
关于Django静态文件未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2385501/