Как сохранить ссылки в TextFields - PullRequest
2 голосов
/ 20 мая 2010

У меня есть простая модель блога с TextField.Каков наилучший способ сохранить ссылки в TextField?

1) Сохранение ссылки в базе данных в таком виде: http://www.example.com, а затем использование некоторого фильтра в шаблоне для преобразования его в форму:

<a rel="nofollow" href="http://www.example.com>http://www.example.com</a>

2) Сохранение ссылки в базе данных непосредственно в этой форме:

<a rel="nofollow" href="http://www.example.com>http://www.example.com</a>

Ответы [ 4 ]

4 голосов
/ 21 мая 2010

Предполагается, что вы говорите о том, как сохранить ссылки (или любое другое форматирование HTML), которые вы включаете в сообщения блога, а не автономные ссылки (например, для блога):

Возможно, вы захотите подумать о применении какого-либо языка разметки, такого как Markdown или BBCode. Затем вы сохраните запись блога в чистом синтаксисе разметки и предоставите метод (например, blog.get_post()), который будет анализировать сохраненную разметку и возвращать HTML. Затем вы используете фильтр safe в своем шаблоне, чтобы избежать экранирования HTML.

Еще лучше, чтобы избежать анализа вашей разметки при каждом запросе, кэшируйте ее в базе данных. Добавьте TextField с именем что-то вроде text_html к вашей Blog модели. Переопределите метод save вашей модели Blog, чтобы разобрать разметку в HTML и сохранить HTML в поле text_html.

Затем, когда вы хотите отобразить сообщение в блоге в шаблоне, вы можете использовать {{ post.text_html|safe }}, не анализируя разметку каждый раз.

Таким образом, ваша модель блога может выглядеть следующим образом (для ясности показано только текстовое поле)

import markdown

class BlogPost(models.Model):
    text = models.TextField()
    text_html = models.TextField(editable=False) # don't want to see this in Admin

    def save(self, force_insert=False, force_update=False):
        self.text_html = markdown(self.text)
        super(BlogPost, self).save(force_insert, force_update)

Чтобы упростить процесс ввода данных, вы также можете добавить хороший редактор javascript - , например, тот, в котором я сейчас набираю ответ .

0 голосов
/ 20 мая 2010

Вы можете использовать поле URL ( или TextField, конечно) и затем отобразить его в шаблоне.

<a rel="nofollow" href="{{ url }}">{{ url }}</a>
0 голосов
/ 21 мая 2010

используйте второй вариант, и после использования safe для выхода из html кода

0 голосов
/ 20 мая 2010

Я бы сохранил сам URL и добавил бы тег и параметры на выходе.По моему мнению, лучше разделить хранение, обработку и представление данных, чтобы легче учесть будущие изменения (например, когда в будущей версии URL будет использоваться для чего-то совершенно другого, например, для автоматической загрузки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...