在所有代码段中,我都看到了如何将过滤器应用于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,它有两个部分。
答案 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