如何在模型文本字段中使用HTML中的Django模板变量?
我想以编程方式生成外部URL,而不是用HTML硬编码,以防其中任何一个在某个时候发生变化 在我的模板中,我有这个如何在模型文本字段中使用HTML中的Django模板变量?,html,django,django-models,django-templates,django-views,Html,Django,Django Models,Django Templates,Django Views,我想以编程方式生成外部URL,而不是用HTML硬编码,以防其中任何一个在某个时候发生变化 在我的模板中,我有这个 <p> {{ article.text|safe }} </p> <a href="{{ external_urls.stack_overflow }}>Stack Overflow</a> 我的观点是这样的 class Article(models.Model): title = models.CharField(max
<p>
{{ article.text|safe }}
</p>
<a href="{{ external_urls.stack_overflow }}>Stack Overflow</a>
我的观点是这样的
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)
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'
在模型的文本字段中,我有这个
<p>
{{ article.text|safe }}
</p>
<a href="{{ external_urls.stack_overflow }}>Stack Overflow</a>
如果我直接将该HTML行包含在模板中,则该HTML行将提供指向的链接,但如果它位于model TextField中,则该链接将指向“{external_url.stack_overflow}”
如何在TextField HTML中转义模板变量?尝试使用
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_url}}
,如果您想创建多个URL,可以使用列表或字典,字典的示例如下:
context['external_urls'] = ['url1':'https://stackoverflow.com', 'url2':'https://facebook.com']
在模板中:
{{external_urls.url1}} #return stackoverflow.com
基于此:
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>
{{文章{文本}}
这里的关键是文本字段中的HTML(即article.text和page_object.text)不能使用与页面相同的上下文,因此您必须首先使用自己的上下文来呈现页面。您必须在HTML中的属性周围加引号:
href=“{{external_url.stack_overflow}”
。请先解决这个问题,然后更新您的问题:)模板引擎在Quotes中呈现变量的任何方式都不起作用。我不确定您想在这里做什么。您是否将django模板代码保存在模型的text
字段中?如果要插入正确的链接,必须对文本字段的内容进行模板呈现。这是您要做的吗@阿皮索兰基>肯定会的。问题不在于呈现,问题在于没有引号,你会得到无效的html。浏览器将尝试赋予它一个含义,但您无法确定如何赋予它。我仍然有相同的问题,{{external_url.url1}}当包含在插入django模板的文本字段中时,会被视为字符串,而不是模板变量。作为一个文本字段,您做了什么,它对我有效,可能会将[]替换为{}我的意思是对象来自的模型中的文本字段,我想呈现的文本字段中有HTML。不过,我还是解决了这个问题,在原始帖子中找到了解决方案。