Django静态文件未加载

标签 django

我正在尝试在为 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/

相关文章:

django - 无法生成或安装证书

python - join() 参数必须是 str 或字节,而不是 'dict' -- 在 Django 中创建具有多表继承的表单

python - 如何有效地在 Django 中存储对象的排名列表?

django - Upstart 卡在停止

python - Django TypeError <Page 1 of 8> 不是 JSON 可序列化的

python - 使用两个模型进行全文搜索

带有 zc.buildout 的 Django 1.4 开发环境

python - 文件未在 Django 中上传

mysql - Django - 对 manage.py 与服务应用程序使用不同的 MySQL 用户?

python - 作为可调用的默认值仅在 django 迁移期间调用一次