我想以编程方式生成外部网址,而不是在HTML中对其进行硬编码,以防其中任何一个在某些时候发生变化
在我的模板中,我有这个。
<p>
{{ article.text|safe }}
</p>
我的文章课就是这个。
class Article(models.Model):
title = models.CharField(max_length=200)
teaser = models.TextField(default = "")
text = models.TextField()
category = models.CharField(max_length=100)
image_name = models.CharField(default = "", max_length=100)
published_date = models.DateField(blank=True, null=True)
我的View类就是这个。
class Article_Page(TemplateView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page,self).get_context_data(**kwargs)
context['article'] = Article.objects.get(pk=kwargs['pk'])
context['external_urls'] = External_Urls()
return context
class External_Urls(object):
stack_overflow = 'https://stackoverflow.com'
在模型的TextField中我有这个。
<a href="{{ external_urls.stack_overflow }}>Stack Overflow</a>
如果我将{@ 3}}直接包含在模板中,那么该行会提供指向https://stackoverflow.com的链接,但如果它位于模型TextField中,则会链接到http://127.0.0.1:8000/articles/pk/ {{external_urls。 stack_overflow}}&#39;。
如何在TextField HTML中转义模板变量?
答案 0 :(得分:1)
尝试
class Article_Page(TemplateView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page,self).get_context_data(**kwargs)
context['article'] = Article.objects.get(pk=kwargs['pk'])
context['external_urls'] = 'https://stackoverflow.com'
return context
并在你的模板中放置{{external_urls}}
,如果你想创建许多网址,你可以使用列表或字典,例如字典:
context['external_urls'] = ['url1':'https://stackoverflow.com', 'url2':'https://facebook.com']
并在您的模板中:
{{external_urls.url1}} #return stackoverflow.com
答案 1 :(得分:1)
基于此:
class Article_Page(DetailView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page, self).get_context_data(**kwargs)
d = {'external_urls':{'stackoverflow.com':'http://www.stackoverflow.com/'}}
rendered = Template(self.object.text).render(Context(d))
context['article'] = self.object
context['article_text_rendered'] = rendered
return context
然后在HTML中:
<p>
{{ article_text_rendered }}
</p>
这里的关键是TextField中的HTML(即article.text和page_object.text)不能使用与页面相同的上下文,因此您必须首先使用自己的上下文进行渲染。