使用从 Django 视图传递的上下文变量自动填充 Django 模板(无 js)
Auto-populate Django template with context variable passed from a Django view (no js)
我有一个 Django 模板 CharField
。用户可以在这里输入手机phone号码并提交。
连接到此模板的视图有时会传递给所述模板,这是一个包含预定义 phone 数字的上下文变量 {{ number }}
。
如何使用{{ number }}
自动填充 Django 模板中的CharField
?
模板代码如下:
<form action="{% url 'user_phonenumber' slug=unique num=decision %}" method="POST">
{% csrf_token %}
<b style="font-size:90%;color:green;">Enter your mobile number:</b><br><br>
{{ form.mobile_number }}<br><br>
<input type="submit" name="number" value="OK"><br>
</form>
如果需要,forms.py 包含以下内容:
class UserPhoneNumberForm(forms.Form):
mobile_number = forms.CharField(max_length=50)
class Meta:
fields = ("mobile_number")
在views.py中,我只有:
class UserPhoneNumberView(FormView):
form_class = UserPhoneNumberForm
template_name = "get_user_phonenumber.html"
def get_context_data(self, **kwargs):
context = super(UserPhoneNumberView, self).get_context_data(**kwargs)
if self.request.user.is_authenticated():
#some code to determine what number should be
context["number"] = number
return context
我看过一些 other SO answers。我链接的最后一个接近解决问题,但解决方案不适用于动态值(这是我需要的),而且它适用于模型形式。其余的并不能完全满足我的特殊需求。
我需要覆盖 def get_initial(self):
的 FormView 才能实现此目的。 IE。不是将上下文变量传递给模板,而是将变量作为 initial
到 get_initial()
传递给相关表单。
我是这样做的:
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
if self.request.user.is_authenticated():
#What's the latest chatpicmessage which houses a pic you own
try:
msg = PicMessage.objects.filter(which_pic__owner=self.request.user).latest('sending_time')
self.initial = {'mobile_number': msg.what_number} #initial needs to be passed a dictionary
return self.initial
except:
return self.initial
else:#i.e user is not authenticated
return self.initial
return self.initial
有关此的更多文档可在此处找到:https://docs.djangoproject.com/es/1.9/ref/forms/fields/#initial
我有一个 Django 模板 CharField
。用户可以在这里输入手机phone号码并提交。
连接到此模板的视图有时会传递给所述模板,这是一个包含预定义 phone 数字的上下文变量 {{ number }}
。
如何使用{{ number }}
自动填充 Django 模板中的CharField
?
模板代码如下:
<form action="{% url 'user_phonenumber' slug=unique num=decision %}" method="POST">
{% csrf_token %}
<b style="font-size:90%;color:green;">Enter your mobile number:</b><br><br>
{{ form.mobile_number }}<br><br>
<input type="submit" name="number" value="OK"><br>
</form>
如果需要,forms.py 包含以下内容:
class UserPhoneNumberForm(forms.Form):
mobile_number = forms.CharField(max_length=50)
class Meta:
fields = ("mobile_number")
在views.py中,我只有:
class UserPhoneNumberView(FormView):
form_class = UserPhoneNumberForm
template_name = "get_user_phonenumber.html"
def get_context_data(self, **kwargs):
context = super(UserPhoneNumberView, self).get_context_data(**kwargs)
if self.request.user.is_authenticated():
#some code to determine what number should be
context["number"] = number
return context
我看过一些 other SO answers。我链接的最后一个接近解决问题,但解决方案不适用于动态值(这是我需要的),而且它适用于模型形式。其余的并不能完全满足我的特殊需求。
我需要覆盖 def get_initial(self):
的 FormView 才能实现此目的。 IE。不是将上下文变量传递给模板,而是将变量作为 initial
到 get_initial()
传递给相关表单。
我是这样做的:
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
if self.request.user.is_authenticated():
#What's the latest chatpicmessage which houses a pic you own
try:
msg = PicMessage.objects.filter(which_pic__owner=self.request.user).latest('sending_time')
self.initial = {'mobile_number': msg.what_number} #initial needs to be passed a dictionary
return self.initial
except:
return self.initial
else:#i.e user is not authenticated
return self.initial
return self.initial
有关此的更多文档可在此处找到:https://docs.djangoproject.com/es/1.9/ref/forms/fields/#initial