将Django 1.6与Python 2.7一起使用。
我的模型有一个BooleanField变量,我希望用户能够通过POST更改此功能,方法是单击按钮将其从False更改为True,反之亦然。有渲染模板的问题。
模特目前:
class Pic(models.Model):
Name = models.CharField(max_length=100)
Good = models.BooleanField()
Image = models.FileField(upload_to="images/")
def __unicode__(self):
return self.Name
应用网址是:
url(r'^(?P<Pic_id>\d+)/$', views.single_picture, name='single_picture'),
在模板中我有:
<form action="{% url 'single_picture' Pic.Good %}" method="post">
{% csrf_token %}
{% if Pic.Good %}
<input type="checkbox" name="choice" id="{{ Pic.Good }}" value="False" />
<label for="{{ Pic.Good }}">False</label><br />
{% else %}
<input type="checkbox" name="choice" id="{{ Pic.Good }}" value="True" />
<label for="{{ Pic.Good }}">True</label><br />
{% endif %}
<input type="submit" value="good" />
</form>
我认为我有:
def single_picture(request, Pic_id):
if request.method == 'GET':
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
return render(request, 'pictures/single_picture.html', {'Pic': pic, 'latest_pictures_list': latest_pictures_list})
elif request.method == 'POST':
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Pic.DoesNotExist):
return render(request, 'pictures/single_picture.html', {'Pic': pic, 'error_message': 'uhhhh...',
})
else:
selected_choice.save()
return HttpResponseRedirect(reverse('pictures/single_picture.html', {'Pic': pic}))
我不确定此时是否存在多个错误。目前,在尝试查看模板时,我得到了
Reverse for 'single_picture' with arguments '(True,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []
代表'&lt;形式&gt;'线。我猜这与我的观点有关吗?
答案 0 :(得分:0)
我认为问题出在您的模板中,在
行中 <form action="{% url 'single_picture' Pic.Good %}" method="post">
你在urls.py中的正则表达式是r'^(?P<Pic_id>\d+)/$'
,我猜它是期望你在Pic
请求中返回的GET
对象的id而不是布尔值,其中该行应
<form action="{% url 'single_picture' Pic.id %}" method="post">
同样,在下面的行中,id="{{ Pic.Good }}"
将显示为HTML id=True
或id=False
,我想您不需要。您需要用id="{{Pic.id}}"