Django striptags,逗号分隔的关键字

时间:2015-09-17 19:01:43

标签: python django for-loop django-templates templatetags

想要实现这一点,例如:

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,但我也需要输出。

1 个答案:

答案 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')])