【问题标题】:Correct path/url for media files in djangodjango 中媒体文件的正确路径/url
【发布时间】:2013-09-01 04:52:14
【问题描述】:

我正在使用 django 1.5.2,我很难理解媒体目录与静态目录的用途以及如何在我的 django 项目中包含样式表。

这是我的目录结构:

django_books
    beer
        __init__.py
        admin.py
        models.py
        views.py
    random_book
        (same as beer above)
    django_books (the actual django project; beer and random_book above are my apps)
        templates
            base.html
            beersall.html
        __init__.py
        settings.py
        urls.py
        views.py
        wsgi.py
        static
            css
                beers.css
    media
        css
            beers.css
    static
        css
            beers.css
    manage.py

我的 beersall.html 模板(啤酒输出是正确的,所以只是链接样式表是错误的):

{% extends 'base.html' %}
{% block content %}

    <div id="beer_list">
        {% for beer in beers %}
        {{ beer }},
        {% endfor %}
    </div>

{% endblock %}

我的 base.html 文件:

<html>
<head>

    <link rel="stylesheet" type="text/css" href="/media/css/beers.css" />
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/beers.css" />
    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/beers.css" />
    <link rel="stylesheet" type="text/css" href="/static/css/beers.css" />
    <link rel="stylesheet" type="text/css" href="/Users/username/Projects/django_books/media/beers.css" />
    <link rel="stylesheet" type="text/css" href="/Users/username/Projects/django_books/static/beers.css" />
    <link rel="stylesheet" type="text/css" href="/Users/username/Projects/django_books/django_books/static/beers.css" />

    {% block extrahead %}{% endblock %}
</head>
<body>
    <div id="page_container">
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

我的 settings.py 文件:

MEDIA_ROOT = '/Users/username/Projects/django_books/media/'
MEDIA_URL = '/Users/username/Projects/django_books/media/'
STATIC_ROOT = ''
STATIC_URL = '/static/'

我应该注意我使用的是 django 开发服务器,而不是 apache。

我的浏览器(开发者控制台)中的错误是 beers.css 是 404。

url 是localhost:8000/beers/,我的 urls.py 文件正确地指向这个,views.py 正确地为 beersall.html 模板提供服务。如何正确链接我的媒体?

编辑

当我将 css 链接 href 值更改为 /Users/username/Projects/django_books/media/ 时,它仍然不起作用。

编辑 2

我已更新 href 值以显示我尝试过的内容。还是不行……

【问题讨论】:

    标签: python css django assets


    【解决方案1】:

    用户上传的文件(由管理员或站点用户)转到媒体目录。 静态文件是由开发者(或第三方应用程序)提供的文件。

    设置如下:

    # Local disk paths
    MEDIA_ROOT = '/Users/username/Projects/django_books/media/'
    STATIC_ROOT = '/Users/username/Projects/django_books/static/'
    
    # URLs visible in the browser's address bar
    MEDIA_URL = '/media/'
    STATIC_URL = '/static/'
    

    并且在您的模板中使用STATIC_URL 变量:

    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/beers.css" />
    

    并将您的样式移动到django_books/static/ 目录。

    【讨论】:

    • {{ STATIC_URL }} 仅将 '/static/' 添加到 href 属性。它不使用静态根。我怎样才能做到这一点?
    • 是的,STATIC_URL 在呈现的 HTML 中仅将“/static/”添加到 URL。要告诉 Django,在本地磁盘上查找文件的位置,请使用 STATICFILES_DIRSSTATICFILES_FINDERS 设置。请参阅文档:docs.djangoproject.com/en/1.5/ref/contrib/staticfiles/…
    【解决方案2】:

    在我的项目中:django_learn,在模板中:check_uncheck_all.html,部分代码:

    {% load staticfiles %}
    <html>
        <head>
            <script type=text/javascript src="{% static 'js/jquery-1.9.1.js' %}"></script>
        </head>
    

    你也可以看看我的settings.py

    【讨论】:

      【解决方案3】:

      已找到静态文件,但权限设置不正确。 (即 403 而不是 404 服务器错误)

      <VirtualHost *:80>
      
          WSGIScriptAlias / /Users/username/Projects/django_books/django_books/django.wsgi
      
          #the directory tag before was /Users/username/Projects/django_books/django_books/>
          #this was one directory too deep
          #from my structure above, you can see I needed to change my directory tag to this:
      
          <Directory /Users/username/Projects/django_books/>
              Order Allow,Deny
              Allow from All
          </Directory>
      
          <Directory /Users/username/.virtualenvs/django_books/lib/python2.7/site-packages/django/contrib/admin/static/admin/>
              Order Allow,Deny
              Allow from All
          </Directory>
      
          Alias /static/admin/ /Users/username/.virtualenvs/django_books/lib/python2.7/site-packages/d$
          Alias /static/ /Users/username/Projects/django_books/static/
      
      </VirtualHost>
      

      【讨论】:

      • 第一个 Alias 指令解决了我遇到的下一个问题,即我的管理 CSS 无法正常工作。我必须包含它,然后将它放在覆盖它的另一个 Alias 之前。
      猜你喜欢
      • 2018-01-16
      • 2011-02-21
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2021-03-02
      • 2021-09-23
      • 2018-06-18
      相关资源
      最近更新 更多