django过滤器包含两个变量的URL

时间:2015-01-26 21:57:17

标签: django django-templates

在所有代码段中,我都看到了如何将过滤器应用于URL的基本模式。例如,

<img src="{{obj.url|filter}}" />

我想知道如何使用包含两部分的URL的过滤器?

<img src="{{something}}{{obj.url}}" />

注意:过滤器应该处理完整的URL,而不仅仅是它的第二部分

修改

型号:

class Foo(models.Model):
    token = models.CharField(max_length=150)
    reference = models.ForeignKey(Reference)

查看:

def index(request):
    foos = Foo.objects.filter(reference=value).all()
    return render(request, 'index.html', {'foos' : foos})

模板:

{% for foo in foos %}
    <img id="foo_{{foo.pk}}" src="{{MEDIA_URL}}{{foo.token}}" />
{% endfor %}

事实上,我想将easythumbnail URL过滤器应用于图像URL,它有两个部分。

1 个答案:

答案 0 :(得分:1)

如果你想用这样的上下文变量做事,那么你应该在上下文中提供你需要的东西,而不是试图操纵模板中的东西。

如果你有很多地方需要的变量,可以从视图中添加变量或创建上下文处理器,因为通过上下文处理器,你可以创建始终可用的变量。

看看我最近写的这个答案; https://stackoverflow.com/a/27797061/1199464

根据您的评论更新

在模型上编写方法来格式化字符串或类似字符没有错;

class Foo(models.Model):
    token = models.CharField(max_length=150)
    reference = models.ForeignKey(Reference)

    def get_url(self):
        url = u'{media_url}{path}'.format(
            media_url=settings.MEDIA_URL,
            path=self.token
        )
        return url

模板:

{% for foo in foos %}
    <img id="foo_{{ foo.pk }}" src="{{ foo.get_url }}" />
{% endfor %}

如果您对Django不太熟悉,请注意,您应该使用MEDIA_URL表示用户上传的内容,使用STATIC_URL表示您的内容。你可以在这里阅读更多相关内容; How can I get the MEDIA_URL from within a Django template?

Django docs; https://docs.djangoproject.com/en/1.7/ref/settings/#media-url