我是Django的新手。我根据他们的名字和网址模式显示图片时遇到了困难。
所以基本上url由几个变量组成,我希望能够用它来获取用这些变量命名的特定图像。
示例:
localhost:8080/farm/chicken
这将获取我的 ../ static / images / 文件夹中的图像并获取:
farm_chicken.jpg
另一个例子:
localhost:8080/zoo/alligator
会得到:
zoo_alligator.jpg
我可以获取url参数。那么,我应该在我的views.py
文件中创建这些图像名称,并将名称(zoo_alligator)传递给稍后要由模板检索的上下文吗?这是正确的方法吗?
感谢大家的建议!我感谢所有的帮助!
答案 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_template
从urls.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可以找到它。