想要实现这一点,例如:
models.py
class Theory(models.Model):
sort = models.PositiveIntegerField(default=1, blank=False, null=False)
title = models.CharField(max_length=500)
title_url = models.SlugField(max_length=500)
graphics = models.ImageField(upload_to='theory', blank=True)
description = RedactorField(blank=True)
def __unicode__(self, ):
return self.title
在
内description = RedactorField(blank=True)
将始终是具有3个,10个,8个或其他数量的<li>
标记的UL。也许以后会添加几个段落,但是现在每个新对象(理论)只有UL
让我们说我的模板变量包含Django Admin中wysiwyg编辑器的描述
<ul>
<li>Theory of Relativity</li>
<li>Interstellar</li>
<li>5D</li>
<li>Black Hole</li>
<li>Tesseract</li>
</ul>
的index.html
{% for text in space %}
{{ text.description | safe }}
{% endfor %}
这将输出上面的HTML。
我的目标是这样做:
Theory of Relativity, Interstellar, 5D, Black Hole, Tesseract
我知道我能做到:
{% for text in space %}
{{ text.description | safe | striptags }}
{% endfor %}
输出将是:
Theory of RelativityInterstellar5DBlack HoleTesseract
如何使用Django和Python实现Striptags +逗号分隔但精确的短语。
我知道我可以在编辑器中将逗号放入Admin中,但我不能这样做。我需要HTML输出,我在页面上的其他地方使用UL作为UL,但我也需要输出。
答案 0 :(得分:1)
我的建议是不将它作为HTML存储在数据库中,而是存储在各个值中,然后您可以将它们输出为HTML或以逗号分隔的列表。
您可以在服务器端非常轻松地进行此格式化,并将其作为模型的属性输出。例如:
# models.py
from django.template.defaultfilters import join as join_filter
from django.template.loader import render_to_string
class Theory(models.Model):
title = models.CharField(max_length=300)
@propery
def as_html(self):
return render_to_string('theories.html', {'theories': self.objects.all()})
@property
def as_comma_separated_list(self):
return join_filter(self.objects.values_list('title', flat=True), ', ')
# theories.html
<ul>
{% for theory in theories %}
<li>{{ theory }}</li>
{% endfor %}
</ul>
现在你的模板是愚蠢的&#34;,你不必在使用BeautifulSoup等事后做任何昂贵的HTML解析。
如果你必须走上BeautifulSoup路线,那就不那么难了:
from bs4 import BeautifulSoup
soup = BeautifulSoup(content, 'html.parser')
theories = ', '.join([li.text for li in soup.findAll('li')])