как отобразить переменную шаблона django как html?

то, что я хочу, похоже на переполнение стека. Пользователь может HTML форматировать свой текстовый ввод, и страница должна отображаться точно так же,

Я использую wmd.js чтобы сохранить форматированный ввод, подумайте, что у меня есть контекстная переменная {{variable}} со строковым значением "<p>something</p>". Когда я визуализирую шаблон,

{{variable}} outputs <p>something</p>

and {{variable|safe}} also output <p>something</p>

он показывает HTML-тег в виде текста на странице. Как отобразить HTML-тег в {{variable}} но не показывает их как обычный текст.

в шаблон

    <div id='thread_answer_content' >
        {% for answer in question.answer_set.all %}
            {{answer.answerbody|safe}}
        {% endfor %}
    </div>

вид

def detail(request,question_id):
q = get_object_or_404(Question,pk=question_id)
return render_to_response('CODE/detail.html',{'question':q},
        context_instance = RequestContext(request)
    )

вот страница администратора django вопроса, кстати, я использую sqlite3 enter image description here

4 ответов


использовать тег:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

{% autoescape off %}{{ variable }}{% endautoescape %} 

вы можете использовать escape чтобы сделать это, вместо safe.

{{ variable|escape }}

для простого форматирования HTML используйте <p>{{something}}</p>. И путь Javascript,

<script type="text/javascript">
    var variable  =  "<p>{{something}}</p>";
    document.write(variable);
</script>

если это {{something}} сам содержит теги HTML, затем {{something|safe}} сам должен работать, если у вас нет {% autoescape on %}. Для дополнительной фильтрации и форматирования см. встроенные шаблонные теги и фильтры.


Я думаю, что другой подход для этого-использовать firstof tag:

обратите внимание, что переменные, включенные в теге прежде не сбежал. Это связано с тем, что теги шаблонов не избегают их содержимого. Любой код HTML или Javascript, содержащийся в печатной переменной, будет отображаться как есть, что потенциально может привести к проблемам безопасности. Если вам нужно бежать переменные в теге прежде, вы должны сделать это явно

{% firstof variable %}