Python 如何在Django模板中包含图像文件?

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文件,需要显示在每个网页的标题。我应该把文件存放在哪里?我应该使用哪个路径让标记使用模板显示它?我尝试了不同的位置和路径,但到目前为止没有任何效果 谢谢你在下面贴出的答案。然而,我尝

我是Django的新手,我正在尝试通过一个名为“dubliners”的简单项目和一个名为“book”的应用程序来学习它。目录结构如下所示:

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文档对其进行了简洁明了的解释,这样链接到此处并在此处键入更为有效,但基本上您将为站点媒体定义一个视图,其中包含指向磁盘上位置的硬编码路径


对。

在生产环境中,您只需将模板生成的HTML指向主机存储媒体文件的位置即可。因此,您的模板将只包含一个示例

<img src="../media/foo.png">

然后,您只需确保目录中有相关的文件

在发展过程中是一个不同的问题。django文档对其进行了简洁明了的解释,这样链接到此处并在此处键入更为有效,但基本上您将为站点媒体定义一个视图,其中包含指向磁盘上位置的硬编码路径

对。

你的

<img src="/home/tony/london.jpg" />
在生产环境中,您希望跳过这一步,让您的http服务器(apache、lighttpd等)服务于静态文件

你的

<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()

我希望这会有帮助。

试试这个

设置.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的工作方式(据我所知是:

  • 在html文件中,它用setting.py中的媒体URL路径替换媒体URL
  • 它在url.py中查找媒体url的任何匹配项,然后查找匹配项(如r“^static/(?P.)$”*与http://localhost:8000/static/)它在媒体根目录中搜索文件,然后加载它

  • 我花了整整两天的时间研究这个问题,所以我想我也应该分享一下我的解决方案。从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的工作方式(据我所知是:

  • 在html文件中,它用setting.py中的媒体URL路径替换媒体URL
  • 它在url.py中查找媒体url的任何匹配项,然后查找匹配项(如r“^static/(?P.)$”*与http://localhost:8000/static/)它在媒体根目录中搜索文件,然后加载它
  • 另一种方法是:

    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_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}}"/>
    

    我明白,你的问题
    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>