因此,经过几个小时的刺激,我终于让我的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
答案 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_DEV
到settings.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