Django Template使用基于函数的视图将字典值渲染为html格式

时间:2015-06-14 01:29:27

标签: html django

摘要

使用Django 1.8,我试图创建一个基于函数的视图,该视图呈现一个允许我更新对象内容的html页面。我可以使用文档here中显示的form.as_p来解决此问题,但我无法在html <input>中获取这些值作为value

问题

问题是只出现第一个单词而文本的其余部分被截断(例如,对于html输入标记,&#39; Hello World Will&#39;的值将变为&#39; Hello& #39)

model.py

class Questions(model.Model):
    title = models.CharField(max_length=512, null=False, blank=False)

forms.py

class QuestionsForm(forms.ModelForm):
    class Meta:
        model = Questions
        fields = ('title', )

views.py

def advice_update(request, pk)
    question_results = Questions.object.get(id=pk)
    advice_form = QuestionsForm(request.POST or None, instance=question_results)
    ...
    return render(request, 'advice/advice_update.html', {'advice_form': advice_form, 'question_results': question_results,})

advice_update.html

<form method='POST' action=''>{% csrf_token %}

# METHOD 1 - This code works and renders the form with paragraphs enclosed
# but I want more control
{{ advice_form.as_p }}

# METHOD 2 - When I try to get the value by itself, it works too
{{ advice_form.instance.title }}  # E.g. 'Hello World'
{{ question_results.title }}  # E.g. 'Hello World'

# METHOD 3 - When I try to put the text inside a 'value' tag in an 'input', 
# the text gets cut off and only the first word appears in the input
# When I look at the console, I see the rest of the text in there.
<input id="id_title" type="text" name="title" class="form-control" value={{ question_results.title }}>

我尝试过添加autoescape和安全标签等一些内容,但是当我使用METHOD 3时,在有空间的情况下,advice.html标签内的value会被切断(例如&#39; Hello World&#39;变成了'Hello&#39;)。

1 个答案:

答案 0 :(得分:1)

首先,您不需要在null=False, blank=False字段设置title,因为默认设置为value

看起来您遇到的主要问题是将Bootstrap css类添加到表单元素中,您可以通过几种不同的方式完成这些操作。另请注意,您的class QuestionsForm(forms.ModelForm): class Meta: model = Questions fields = ('title', ) def __init__(self, *args, **kwargs): super(QuestionsForm, self).__init__(*args, **kwargs) self.fields['title'].widget.attrs['class'] = 'form-control' 属性缺少引号。

第一种方法是从表单的Python端向窗口小部件添加适当的分类:

{{ form.title|add_class:"form-control" }}

然而,当你处理很多表单字段时,这真的很乏味。因此,我使用django-widget-tweaks代替在模板级别添加这些内容:

question = get_object_or_404(Question, id=pk)

我发现它更容易处理。这样您就不必手动渲染该字段。如果您的视图中没有匹配的问题,请务必处理此案例:

https://YOURAPP.firebaseio.com/.json?print=pretty&format=export