Django:模板路径有问题吗?

时间:2011-05-23 14:03:10

标签: django templates path

因此,经过几个小时的刺激,我终于让我的django网站启动并运行!我现在唯一的问题是所有的样式表/图像链接不正确。或者,好吧,它们是正确链接的,但是django不会给我这些文件。

这就是它的设置方式:

views.py:

from django.shortcuts import render_to_response

def home(request):
    return render_to_response('index.html')

urls.py:

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'mysite.views.home', name='home'),
)

然后调出index.html,但没有显示其他文件,如图像,样式表等。如何解决这个问题?我觉得这很容易!?我试过谷歌搜索,但找不到任何东西。

提前致谢, QWERTY

3 个答案:

答案 0 :(得分:1)

听起来你正在寻找能够serve static files的能力。

基本上,您需要在项目的某处添加一个文件夹以保存媒体。然后,您需要编辑urls.py和settings.py文件以适应对新静态媒体目录的访问。

urls.py

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'mysite.views.home', name='home'),

    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':
        settings.STATIC_ROOT}),
)

settings.py

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
# Should be the location where you put your static folder.
# Should be different for testing and production environments.
STATIC_ROOT =  os.path.join(PROJECT_ROOT, 'media')

# This is assuming that your settings.py file is in path/to/project/ and your
# static files are in path/to/project/media/

然后在你的模板中你可以这样做:

< img src="/static/my_image.jpg" / >

或者你想要什么。这适用于javascript,css和图像文件。

答案 1 :(得分:1)

扩展Shamanu4的评论:你要求的是如何提供静态文件。出于开发目的,您可以使用static file server

但从长远来看,这不是最佳解决方案。简单的方法是隔离所有静态文件,并通过不同的路径直接通过Web浏览器提供这些文件。在Apache中,如果首先配置静态路径,则此静态文件路径可以位于Django路径中。

如果您需要高性能,Django团队建议您使用轻量级,速度优化的服务器(例如lighttpd)来提供静态文件,使用另一台具有WSGI支持的服务器(例如Apache)来为Django提供服务。 / p>

在我工作的Django项目中,我有来自/djangoprojname/的Django和来自/djangoprojname/static/的静态文件。在磁盘上,static目录与我的Django项目目录处于同一级别。两者都在Mercurial存储库中。在static/内,我有css/js/img/,在这些目录中,每个应用都有一个目录,名称与应用相同。这可以防止事情变得混乱。

我的django.conf(在Fedora或RHEL的/etc/httpd/conf.d中看起来像:

WSGIDaemonProcess djangoprojname threads=15
WSGISocketPrefix /var/run/wsgi/wsgi

Alias /djangoprojname/static/ /var/www/djangoprojname/static/
Alias /djangoprojname/admin/media/ /usr/lib/python2.6/site-packages/django/contrib/admin/media/
WSGIScriptAlias /djangoprojname /var/www/djangoprojname/django.wsgi
WSGIProcessGroup djangoprojname

<Directory /var/www/djangoprojname>
    Order deny,allow
    Allow from all
</Directory>

<Directory /usr/lib/python2.6/site-packages/django/contrib/admin/media>
    Order deny,allow
    Allow from all
</Directory>

对于开发,我将其添加到项目的urls.py

的末尾
# Only serve static media if in development (runserver) mode.
if settings.IS_DEV:
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
            {'document_root': settings.MEDIA_ROOT, 
            'show_indexes': True}),
    )
如果在开发服务器上运行,则settings.IS_DEVsettings.py设置

True。如果使用manage.py,则runserver被修改为设置环境变量,settings.py检查此变量。 MEDIA_ROOT设置为static目录的路径。

答案 2 :(得分:0)

您可能在 settings.py 中遇到 MEDIA_ROOT MEDIA_URL 的问题。请参阅http://docs.djangoproject.com/en/1.3/ref/settings/#media-root