Django:如何提供媒体/样式表并在模板中链接到它们

2024-09-27 02:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

有人问过这个问题的变体,但我仍然无法在呈现模板时正确加载样式表。

我试图在开发过程中为Django进程中的静态媒体提供服务——我知道,这在生产中是非常不受欢迎的。我会发布我的配置和模板,希望有人能帮助我理解哪里出错了。

请注意,我确实尝试遵循Django项目网站上的示例,但是它没有提到如何从模板引用样式表。我也尝试过同一件事的许多不同变体,所以我的代码/设置可能与所描述的有点出入。

设置.py

MEDIA_ROOT = 'D:/Dev Tools/django_projects/dso/media'
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/'

网址.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^ovramt/$', 'dso.ovramt.views.index'),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

在我的模板中:

<head> 
<title> {% block title %} DSO Template {% endblock %} </title> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<link rel="stylesheet" type="text/css" href="../media/styles.css">
</head>

我向您保证,文件(模板/媒体)在我的文件系统的正确目录中。如果有任何额外的信息,我需要提供,请张贴评论。


编辑:

我遇到的一个问题是在链接前使用“/”前缀。如果正斜杠在前面,则从站点的根打开链接。如果没有正斜杠,链接将在当前级别打开。例如:

www.example.com/application/有一个链接“/app2/和一个链接“app3/”
app2将在www.example.com/app2/上打开,app3将在www.example.com/application/app3/上打开。我想这让我很困惑。


Tags: djangofromimportcom模板settingsadmintitle
3条回答

我通常将自己的模板标记简单化,因为Django没有提供CSS/JavaScript文件。Apache这样做,所以我的媒体url通常是http://static.mysite.com

您的应用程序/模板标记/媒体url.py:

from django.template import Library
from yourapp.settings import MEDIA_URL
register = Library()

@register.simple_tag
def media_url():
    return MEDIA_URL

并且在我的模板文件中:

{% load media_url %}
<link href="{{ media_url }}css/main.css" rel="stylesheet" type="text/css">

您还可以使your own context preprocessor在每个模板中添加媒体url变量。

我只是自己想办法。

设置.py:

MEDIA_ROOT = 'C:/Server/Projects/project_name/static/'
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

网址.py:

from django.conf import settings
...
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

模板文件:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

文件位于此处:

"C:/Server/Projects/project_name/static/css/style.css"

Django已经有媒体URL的上下文进程,请参见Django's documentation

默认情况下,它应该在RequestContext中可用(除非您已经自定义了上下文处理器并忘记添加它)。

相关问题 更多 >

    热门问题