0

我对 Django 真的很陌生。我很难根据名称和 url 模式显示图像。

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

例子:

localhost:8080/farm/chicken

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

farm_chicken.jpg

另一个例子:

localhost:8080/zoo/alligator

将得到:

zoo_alligator.jpg

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

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

4

2 回答 2

2

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

如果你是使用你的url节点来决定显示哪张图片,那么在你对应的视图函数中,你实际上是在使用“alligator”或者“chicken”来加载对应的Animalclass。

一旦实例化了正确的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是 my 中的一种方法,Merchant class它在那里计算 url。

于 2012-11-05T01:40:56.197 回答
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})

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

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

您应该阅读有关编写自定义过滤器和标签的文档以获取更多详细信息,包括存储过滤器代码的位置以确保 django 可以找到它。

于 2012-11-05T02:43:05.790 回答