Python 如何在Django模板中包含图像文件?
我是Django的新手,我正在尝试通过一个名为“dubliners”的简单项目和一个名为“book”的应用程序来学习它。目录结构如下所示:Python 如何在Django模板中包含图像文件?,python,django,django-templates,Python,Django,Django Templates,我是Django的新手,我正在尝试通过一个名为“dubliners”的简单项目和一个名为“book”的应用程序来学习它。目录结构如下所示: dubliners/book/ [includes models.py, views.py, etc.] dubliners/templates/book/ 我有一个JPG文件,需要显示在每个网页的标题。我应该把文件存放在哪里?我应该使用哪个路径让标记使用模板显示它?我尝试了不同的位置和路径,但到目前为止没有任何效果 谢谢你在下面贴出的答案。然而,我尝
dubliners/book/ [includes models.py, views.py, etc.]
dubliners/templates/book/
我有一个JPG文件,需要显示在每个网页的标题。我应该把文件存放在哪里?我应该使用哪个路径让标记使用模板显示它?我尝试了不同的位置和路径,但到目前为止没有任何效果
谢谢你在下面贴出的答案。然而,我尝试了图像的相对路径和绝对路径,但仍然会在网页中显示一个损坏的图像图标。例如,如果我的主目录中有一个图像,并在模板中使用此标记:
<img src="/home/tony/london.jpg" />
图像不显示。但是,如果将网页保存为静态HTML文件,则会显示图像,因此路径是正确的。也许Django附带的默认Web服务器仅在图像位于特定路径时才会显示图像?在生产环境中,您只需将模板生成的HTML指向主机存储媒体文件的位置即可。因此,您的模板将只包含一个示例
<img src="../media/foo.png">
然后,您只需确保目录中有相关的文件
在发展过程中是一个不同的问题。django文档对其进行了简洁明了的解释,这样链接到此处并在此处键入更为有效,但基本上您将为站点媒体定义一个视图,其中包含指向磁盘上位置的硬编码路径
对。你的
<img src="/home/tony/london.jpg" />
在生产环境中,您希望跳过这一步,让您的http服务器(apache、lighttpd等)服务于静态文件 试试这个
设置.py
#通常是os.path.join(os.path.dirname(_文件,'media'))
媒体根=“/MEDIA”
媒体URL='/MEDIA/'
url.py
urlpatterns=patterns(“”,
(r'^media/(?P.*)$,'django.views.static.service',
{'document_root':settings.MEDIA_root}),
)
.html
/“/>
警告
注意!使用Context()
将为{{MEDIA\u URL}}
生成一个空值。必须改用RequestContext()
我希望,这会有所帮助。我花了整整两天的时间来研究这个问题,所以我想我也应该分享我的解决方案。从2010年11月26日起,当前的分支是1.2.X,这意味着您必须在settings.py中包含以下内容:
MEDIA_ROOT=“”(即/home/project/django/app/templates/static)
媒体URL=”http://localhost:8000/static/"
*(请记住,MEDIA_ROOT是文件所在的位置,MEDIA_URL是模板中使用的常量。)*
然后在url.py中放置以下内容:
import settings
# stuff
(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
导入设置
#东西
(r“^static/(?P.*)”,“django.views.static.service”,{'document_root':settings.MEDIA_root}),
然后,您可以在html中使用:
<img src="{{ MEDIA_URL }}foo.jpg">
<img class="scale-with-grid" src="{{object.photo.url}}"/>
django的工作方式(据我所知是:
MEDIA_ROOT = '/home/USER/Projects/REPO/src/PROJECT/APP/static/media/'
MEDIA_URL = '/static/media/'
这需要您将媒体文件夹移动到静态文件夹的子目录中
然后,您可以在模板中使用:
<img src="{{ MEDIA_URL }}foo.jpg">
<img class="scale-with-grid" src="{{object.photo.url}}"/>
我确实理解,您的问题是关于存储在MEDIA\u ROOT中的文件,但有时,当您不再计划创建该类型的内容时,可以将内容存储在静态中。
这可能是一种罕见的情况,但无论如何——如果你的网站上有大量的“每日图片”——而所有这些文件都在你的硬盘上 在这种情况下,我看不到以静态方式存储此类内容的矛盾。
一切都变得非常简单: 静止的 链接到保存在static_ROOT Django中的静态文件 随附静态模板标记。无论是否 您是否正在使用RequestContext
{%load static%}
复制自我尝试了各种方法,但都不起作用。但这起作用。希望它也能对您起作用。文件/目录必须位于以下位置: 项目/你的应用程序/模板 项目/你的应用程序/静态 设置.py 例如:
STATIC_ROOT = '/home/project_name/your_app/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS =(
PROJECT_DIR+'/static',
##//don.t forget comma
)
TEMPLATE_DIRS = (
PROJECT_DIR+'/templates/',
)
proj/app/templates/filename.html
体内
{% load staticfiles %}
//for image
img src="{% static "fb.png" %}" alt="image here"
//note that fb.png is at /home/project/app/static/fb.png
如果fb.png在/home/project/app/static/image/fb.png中,那么
img src="{% static "images/fb.png" %}" alt="image here"
如果您的文件是模型中的模型字段,您还可以在模板标记中使用“.url”来获取图像 比如说 如果这是您的型号:
class Foo(models.Model):
foo = models.TextField()
bar = models.FileField(upload_to="foo-pictures", blank = True)
在视图中的上下文中传递模型
return render (request, "whatever.html", {'foo':Foo.objects.get(pk = 1)})
在模板中,您可以有:
<img src = "{{foo.bar.url}}">
/项目根目录下的媒体目录 设置.py url.py
urlpatterns+=patterns('django.views.static',(r'^media/(?P.*),'serve',{'document_root':settings.media_root}),)
模板
正在开发中
在应用程序文件夹中创建文件夹名称“static”,并将图片保存在该文件夹中。
要使用图片,请使用:
<html>
<head>
{% load staticfiles %} <!-- Prepare django to load static files -->
</head>
<body>
<img src={% static "image.jpg" %}>
</body>
</html>
{%load staticfiles%}
正在生产中:一切都和开发中一样,只需为Django添加更多参数:
STATIC\u ROOT=os.path.join(BASE\u DIR,“STATIC/”)
(这将准备用于存储所有应用程序静态文件的文件夹)INSTALLED\u APPS=['myapp',]
这就是Django所需要的,在此之后,您需要进行一些web服务器端设置,以便为使用静态文件夹做好准备
class Foo(models.Model):
foo = models.TextField()
bar = models.FileField(upload_to="foo-pictures", blank = True)
return render (request, "whatever.html", {'foo':Foo.objects.get(pk = 1)})
<img src = "{{foo.bar.url}}">
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urlpatterns += patterns('django.views.static',(r'^media/(?P<path>.*)','serve',{'document_root':settings.MEDIA_ROOT}), )
<img src="{{MEDIA_URL}}/image.png" >
<html>
<head>
{% load staticfiles %} <!-- Prepare django to load static files -->
</head>
<body>
<img src={% static "image.jpg" %}>
</body>
</html>