【发布时间】:2015-07-25 11:21:05
【问题描述】:
在我的 URL 中添加额外变量时遇到了一些问题。我目前将其设置为:
url(r'^(?P<blog_id>[0-9]+)/?$', 'blog.views.blog_show', name='show'),
不过我也想在标题中加入 slug:
url(r'^(?P<blog_id>[0-9]+)/(?P<blog_slug>\S+)/?$', 'blog.views.blog_show', name='show'),
我已经设法让它工作了,但是当我的用户在我的博客上更新 cmets 时,发生了一些有趣的事情,因为它没有记录到数据库并且没有正确重定向。
urls.py
urlpatterns = [
# Examples: /blogs
url(r'^$', 'blog.views.index', name='index'),
url(r'^new$', 'blog.views.new', name='new'),
url(r'^create$', 'blog.views.create', name='create'),
url(r'^(?P<blog_id>[0-9]+)/?$', 'blog.views.blog_show', name='show'),
url(r'^(?P<blog_id>[0-9]+)/edit$', 'blog.views.blog_edit', name='edit'),
url(r'^(?P<blog_id>[0-9]+)/update$', 'blog.views.blog_update', name='update'),
url(r'^(?P<blog_id>[0-9]+)/delete$', 'blog.views.delete_blog', name='delete'),
url(r'^(?P<blog_id>[0-9]+)/new_comment$', 'blog.views.new_comment', name='comment'),
# url(r'^blog/', include('blog.urls')),
]
views.py
def new_comment(request, blog_id, blog_slug):
#blog = Blog.objects.get(pk=blog_id)
blog = get_object_or_404(Blog, pk=blog_id)
c = Comment()
c.comment_content = request.POST['comment_content']
c.blog_id = blog
c.user_id = User.objects.all()[0]
c.save()
return HttpResponseRedirect(reverse('show', args=(blog.id,)))
def blog_show(request, blog_id, blog_slug):
#blog = Blog.objects.get(pk=blog_id)
blog = get_object_or_404(Blog, pk=blog_id)
comment_obj = blog.comment_set.all().order_by('-id')
paginator = Paginator(comment_obj, 2)
page = request.GET.get('page')
try:
comment_list = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
comment_list = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
comment_list = paginator.page(paginator.num_pages)
template_hash = {'comment_list':comment_list,'blog':blog}
return render(request, 'blog/show.html',template_hash)
show.html
{% load django_markdown %}
<h1>{{ blog.blog_title }}</h1>
<p>
{{ blog.blog_content|markdown}}
</p>
<form action = '/blogs/{{blog.id}}/{{blog.slug}}/new_comment' method = "post">{% csrf_token %}
<div>New Comment:<br><textarea type = "text" name ='comment_content'></textarea></div>
<input type = "submit" value = "Submit">
</form>
<h3>Comments</h3>
{% if comment_list %}
{% for comment in comment_list %}
<p>{{comment}}</p>
{% endfor %}
{% else %}
<p>No Comments</p>
{% endif %}
<div class="pagination">
<span class="step-links">
{% if comment_list.has_previous %}
<a href="?page={{ comment_list.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ comment_list.number }} of {{ comment_list.paginator.num_pages }}.
</span>
{% if comment_list.has_next %}
<a href="?page={{ comment_list.next_page_number }}">next</a>
{% endif %}
</span>
</div>
我遇到的问题是,当我将它重定向并记录到数据库时,cmets 将不再记录,并且重定向卡在http://localhost:8000/blogs/1/my-first-blog/new_comment。而不是仅仅去http://localhost:8000/blogs/1/my-first-blog/
我虽然通过更新下面的内容它会正确重定向但它没有
<form action = '/blogs/{{blog.id}}/{{blog.slug}}/new_comment' method = "post">{% csrf_token %}
任何帮助将不胜感激。
【问题讨论】:
-
您能否在上下文中显示该新 URL 与其他现有 URL?
-
是的。不太担心其他人,因为当我完成这项工作时,我可以将相同的理论应用于他们。我尝试将显示和评论网址更新为以下内容: url(r'^(?P
[0-9]+)/(?P \S+)/?$', 'blog .views.blog_show', name='show'), url(r'^(?P [0-9]+)/(?P \S+)/new_comment$', 'blog.views .new_comment', name='comment'), 但还是没有骰子
标签: django