这应该是一种常见的情况,但我无法在Django文档或互联网上的许多与Django相关的教程中找到正确的方法。所以我可能只是不知道该找什么,或者没有特别的方法。我是一个业余爱好程序员,刚开始使用Django,所以肯定缺乏很多知识,但我也在寻找最佳实践,而不仅仅是解决方法。
我有一个基于功能的详细视图,可以显示照片和评论。所以urls.py包含:
app_name = 'photos'
urlpatterns = [url(r'^(?P<photo_id>\d+?)', views.single_photo_page, name="single-photo"),]
在views.py中:
@login_required
def single_photo_page(request, photo_id: str):
photo = get_photo_by_id(photo_id)
if photo:
return render(request, 'photos/single_photo.html', {'photo': photo})
else:
return HttpResponseNotFound('Photo %d not found' % photo_id)
single_photo.html:
<h1>{{ photo.id }}</h2>
<img src="{{ photo.image.url }}"/>
{% for comment in photo.comment_set.all|dictsort:"creation_timestamp" %}
<div>
<p>{{ comment.signature }}</p>
<div>{{ comment.body|linebreaksbr|urlize }}</div>
</div>
{% endfor %}
要接受用户评论,我想使用Django的表单功能,但无法找到如何将表单嵌入到现有视图中。所以我手工完成了它:
view.py:
@login_required
def single_photo_page(request, photo_id: str):
photo = get_photo_by_id(photo_id)
try:
new_comment_body = request.POST['comment-body']
if new_comment_body:
comment = Comment.objects.create(
author=request.user,
body=new_comment_body,
photo=photo
)
comment.save()
else:
messages.add_message(request, messages.ERROR, 'Empty comment')
except KeyError:
# no comment body in the request, so it's not a request from the form
pass
if photo:
return render(request, 'photos/single_photo.html', {'photo': photo})
else:
return HttpResponseNotFound('Photo %d not found' % photo_id)
single_photo.html,在评论渲染之后:
<form action="{% url 'photos:single-photo' photo.id %}" method="post">
{% csrf_token %}
<label for="comment-body">Add comment</label><br />
<textarea id="comment-body"></textarea>
<input type="submit" value="Save" />
</form>
这种方法工作正常,但意味着我手动完成设计Django表单功能的东西。我错过了什么,或者是正确的方法吗?