我正在使用django-floppyforms。 如何将一些值传递给html模板? (两者都用于初始化字段和简单打印)。 下面的代码解释了设置:
models.py:
class ContactMessage(models.Model):
msg_sender = models.ForeignKey(User, related_name="sent_messages")
msg_receiver = models.ForeignKey(User, related_name="received_messages")
listing = models.ForeignKey(Listing)
msg_title = models.CharField(max_length=200)
msg_body = models.TextField()
urls.py:
url(r'^listing/(?P<listing_id>\d+)/reply/$', views.ReplyListingView.as_view(), name='reply_listing'),
views.py:
class ReplyListingView(CreateView):
model = ContactMessage
form_class = CreateContactMessageForm
forms.py:
class CreateContactMessageForm(forms.ModelForm):
class Meta:
model = ContactMessage
exclude = ['msg_sender',
'msg_receiver',
'listing',
]
widgets = {
'msg_title': forms.TextInput({"value": ????}),
'msg_body': forms.Textarea,
}
contactmessage_form.html:
{% extends 'base.html' %}
{% block content %}
<div class="row">
<div class="col-md-6">
<p>USER: {{request.user}}
SENDER: {{ form.sender }}
RECEIVER: {{ form.receiver }}
LISTING: {{ form.listing }}
</p>
<form method="post">
{% csrf_token %}
{{form}}
<input class="btn btn-success" type="submit" value="Send" />
<button type="button" class="btn btn-default" onClick="window.history.back();">
Cancel
</button>
</form>
</div>
</div>
{% endblock %}
所以:
假设在某个上下文中,我知道列表,发件人和接收者(背景说明:URL具有listing_id,因此列表的标题和所有者是已知的;此外,发件人应该是当前登录的用户)。
现在我想显示一个ReplyListingView,将这三个值传递给它,然后让它显示CreateContactMessageForm,以便:
msg_title小部件预先填充了给定列表的“title”字段的值(即代替上面代码中的“????”部分)
我可以访问html(<p>USER:...</p>
部分)中发件人,收件人和列表字段的值。
我该怎么做?
我希望这个问题很清楚。
谢谢:)
答案 0 :(得分:0)
假设floppyforms像django表单一样工作(并且看起来那样),只需使用initial:https://docs.djangoproject.com/en/dev/ref/forms/api/#dynamic-initial-values
答案 1 :(得分:0)
有一个初始的View变量。
看看这个网站,他们拥有所有查看方法和变量: http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/
您还可以覆盖实例化表单并添加初始
的方法答案 2 :(得分:0)
class ReplyListingView(CreateView):
model = ContactMessage
form_class = CreateContactMessageForm
#add this line to the view
initial={"field_name":"value"}
答案 3 :(得分:0)
关于标题,您应该使用get_initial
将初始数据传递到表单。
关于其他非表单内容,您的视图应通过get_context_data
将其注入模板。
class ReplyListingView(CreateView):
model = ContactMessage
form_class = CreateContactMessageForm
def get_initial(self):
d = super(ReplyListingView, self).get_initial()
d['title'] = "blah"
return d
def get_context_data(self, **kwargs):
d = super(ReplyListingView, self).get_context_data(**kwargs)
d['foo'] = 'bar'
return d