Django 模板中使用css, javascript

(r'^css/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/var/www/django-demo/css'}),
(r'^js/(?P</path><path>.*)$', 'django.views.static.serve', {'document_root': '/var/www/django-demo/js'}),
(r'^images/(?P</path><path>.*)$', 'django.views.static.serve', {'document_root': '/var/www/django-demo/images'}),
模板中使用下述方式即可:
<link href="/css/demo.css" type="text/css" rel="stylesheet">
注:可采用os.path.dirname(globals()["__file__"])来获得当前文件所在路径,比如
(r'^css/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.dirname(globals()["__file__"])+'/css'}),
可以使用os.path.abspath()函数返回此路径的绝对路径。
==============
要在django的tempalte file中引用css、js、gif等静态文件,首先一条setting.py中DEBUG开关打开。
1、在project目录下建立一个存放静态文件的目录,如:medias
2、在url.py patterns中增加一行:
(r'^site_media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_PATH}),
还要from django.conf import setting
3、在setting.py中加入一行:
STATIC_PATH='./medias'
如此设置后,就可以在template file 中引用media中存放的静态文件了,如:
<img src='/site_media/django.gif'>

 

 

url的一些应用:


settings.py

ROOT = os.path.abspath(os.path.dirname(__file__))
STATIC_JS = os.path.join(ROOT, 'public', 'js')
STATIC_CSS = os.path.join(ROOT, 'public', 'css')



url.py

from django.conf import settings
    url(r'^$', include('ad.application.controllers.urls')),  #包含其他url conf
    url(r'^(?i)js/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_JS}),
    url(r'^(?i)css/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_CSS}),

 

template file

<script type="text/javascript" src="/js/jquery.js"></script>


 

指定url root

首先在settings.py中增加了一个配置项:URLROOT=”。这里我设为空,在真正部署时要改为实际的前缀,如’/platform’。注意后面不要有’/',因为原来的程序都是从’/'开始的,因此不需要最后的’/'。对于view中的url修改比较简单,首先写一个helper函数,用来从settings.py中读配置项:

from django.conf import settings
def setting(name, defaultvalue=”):
    return getattr(settings, name, defaultvalue)

然后在需要修改URL的地方加上:

setting(‘URLROOT’) + ‘/login/’

这样就可以了。

对于template的修改分为三种情况。对于静态文件的URL,不用修改,继续使用如/site_media/img/xxx 这样的URL,因为可以通过配置web server的URL映射规则来进行处理,所以不用修改。那么要修改就是针对于动态的View方法的URL,有相对路径的和绝对路径的。为了可以在template中使用settings信息,可以通过设置TEMPLATE_CONTEXT_PROCESSORS来增加一个ContextProcessor的处理函数将settings对象导入,如:

TEMPLATE_CONTEXT_PROCESSORS = (
    ‘django.core.context_processors.auth’,
    ‘django.core.context_processors.debug’,
    ‘django.core.context_processors.i18n’,
    ‘django.core.context_processors.request’,
    ‘utils.setting_process.settings’,
)

然后编写一个简单的ContextProcessor的函数:

from django.conf import settings as _settings

def settings(request):
    return {’settings’: _settings}

这样就可以在template中使用settings对象了。

对于绝对路径,在绝对路径前加上:{{ settings.URLROOT }}/login/ 就可以了。对于相对路径则可以不作修改。

经过上面的修改,当部署应用时有前缀,只要把 settings.py 中的URLROOT 修改一下就可以了。

不过上述只是考虑了整个应用有前缀的情况,并没有考虑某个App功能的前缀变化的问题。在woodlog项目中其实是考虑了这一点。它把所以App的前缀都放在settings.py进行配置了,如:

APP_ROOT = {’blog’:'blog’, ’setting’:’setting’, ‘tags’:'tags’, ‘digest’:'digest’, ‘rss’:'rss’}

这样在处理view和template时还要考虑URL是哪个app的,然后从settings.py中得到相应的配置值。不过这里比较简单,就没有考虑。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值