摘要
使用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;)。
答案 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