URL 的 django 过滤器,由两个变量组成

django filter for URL that consists of two variables

在所有代码片段中,我看到了如何将过滤器应用于 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 %}

事实上,我只想对图像 URL 应用 easythumbnail URL 滤镜,它有两个部分。

如果您想像这样使用上下文变量做事,那么您应该在上下文中提供您需要的内容,而不是试图在模板中操作内容。

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

看看我最近写的这个答案;

根据您的评论更新

在你的模型上编写一个方法来格式化字符串或类似的东西没有错;

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 文档; https://docs.djangoproject.com/en/1.7/ref/settings/#media-url