在Django中基于名称显示图像的正确有效方法是什么

时间:2012-11-05 01:36:18

标签: django django-templates django-views

我是Django的新手。我根据他们的名字和网址模式显示图片时遇到了困难。

所以基本上url由几个变量组成,我希望能够用它来获取用这些变量命名的特定图像。

示例:

localhost:8080/farm/chicken

这将获取我的 ../ static / images / 文件夹中的图像并获取:

farm_chicken.jpg

另一个例子:

localhost:8080/zoo/alligator

会得到:

zoo_alligator.jpg

我可以获取url参数。那么,我应该在我的views.py文件中创建这些图像名称,并将名称(zoo_alligator)传递给稍后要由模板检索的上下文吗?这是正确的方法吗?

感谢大家的建议!我感谢所有的帮助!

2 个答案:

答案 0 :(得分:2)

一般来说,你实际上不会做那样的事情。您应该做的是将图像作为上下文变量从视图函数发送到模板。

如果您使用url节点来确定要显示的图片,那么在相应的视图函数中,您实际上正在使用“alligator”或“chicken”来加载相应的Animal类。

实例化正确的animal对象后,您可以将此动物对象发送到django模板,并使用与此类似的代码段加载图像: -

像这样: -

{% if animal.get_latest_medium_url %}
    <img id="animal_image" class="img-rounded left" src="/media/{{ animal_image }}" />
{% endif %}

get_latest_medium_url是我Merchant class中的一种方法,它会在那里计算网址。

答案 1 :(得分:1)

  

那么,我应该在views.py文件中创建这些图像名称并传递   将名称(zoo_alligator)放入要检索的上下文中   模板以后?这是正确的方法吗?

当然,这是一种方法。像这样:

(r'show/(?P<in_path>.*)$','someapp.image_view')

然后在image_view

def image_view(request,in_path):
    img = in_path.replace('/','_')+'.jpg'
    return render(request,'some_template.html',{'path':img})

但是,由于您的视图非常简单 - 您可以使用direct_to_templateurls.py直接将路径传递给模板:

from django.views.generic.simple import direct_to_template

(r'show/(?P<in_path>.*)$',direct_to_template,{'template':'some_template.html'})

some_template.html

<img src="{{ params.in_path }}">

问题是你不会完成字符串格式化,因为默认过滤器没有“替换”功能。您可以轻松编写自定义过滤器:

@register.filter
@stringfilter
def format_path(the_path):
    return the_path.replace('/','_')+'.jpg'

然后修改模板:

<img src="{{ params.in_path|format_path }}">

您应该阅读writing custom filters and tags上的文档,了解更多详细信息,包括存储过滤器代码的位置,以确保django可以找到它。