0

このチュートリアルを使用して簡単なフォーラムを作成していますhttp://lightbird.net/dbe/forum1.html

どうしたらよいかわからないこのエラーが発生しました。このエラーの修正を手伝ってもらえますか?

  NoReverseMatch at /forum/post/reply/1/

  Reverse for 'forum' with arguments '('',)' and keyword arguments '{}' not found.

  Request Method:   GET
  Request URL:  http://127.0.0.1:8000/forum/post/reply/1/
  Django Version:   1.4.3
  Exception Type:   NoReverseMatch
  Exception Value:  

  Reverse for 'forum' with arguments '('',)' and keyword arguments '{}' not found.

  Exception Location:   C:\Python26\Lib\site-packages\django\template\defaulttags.py in render, line 424
  Python Executable:    C:\Python26\python.exe

  Error during template rendering

  In template C:\djcode\mysite\forum\templates\forum\post.html, error at line 1
  Reverse for 'forum' with arguments '('',)' and keyword arguments '{}' not found.


  1     <a href="{% url ben:forum forum_pk %}">&lt;&lt; back to list of topics</a>

私のPost.htmlは

  <a href="{% url ben:forum forum_pk %}">&lt;&lt; back to list of topics</a>

私の見解は:

 from django.core.urlresolvers import reverse
 from mysite.settings import MEDIA_ROOT, MEDIA_URL
 from forum.models import Forum
 from django.shortcuts import render_to_response
 from forum.models import Thread
 from django.core.paginator import Paginator, InvalidPage, EmptyPage
 from django.core.context_processors import csrf
 from forum.models import Post

 def main(request):
     """Main listing."""
     forums = Forum.objects.all()
     return render_to_response("forum/list.html", dict(forums=forums,   user=request.user))
 def forum(request, pk):
          """Listing of threads in a forum."""
     threads = Thread.objects.filter(forum=pk).order_by("-created")
     threads = mk_paginator(request, threads, 20)
     return render_to_response("forum/forum.html", add_csrf(request, threads=threads, pk=pk))
 def thread(request, pk):
     """Listing of posts in a thread."""
     posts = Post.objects.filter(thread=pk).order_by("created")
     posts = mk_paginator(request, posts, 15)
     title = Thread.objects.get(pk=pk).title
     return render_to_response("forum/thread.html", add_csrf(request, posts=posts, pk=pk,
         title=title, media_url=MEDIA_URL))
 def add_csrf(request, ** kwargs):
     d = dict(user=request.user, ** kwargs)
     d.update(csrf(request))
     return d

 def mk_paginator(request, items, num_items):
     """Create and return a paginator."""
     paginator = Paginator(items, num_items)
     try: page = int(request.GET.get("page", '1'))
     except ValueError: page = 1

     try:
         items = paginator.page(page)
     except (InvalidPage, EmptyPage):
         items = paginator.page(paginator.num_pages)
     return items
 def post(request, ptype, pk):
     """Display a post form."""
     action = reverse("ben:%s" % ptype, args=[pk])
     if ptype == "new_thread":
         title = "Start New Topic"
         subject = ''
     elif ptype == "reply":
         title = "Reply"
         subject = "Re: " + Thread.objects.get(pk=pk).title

     return render_to_response("forum/post.html", add_csrf(request, subject=subject,
    action=action, title=title))
 def new_thread(request, pk):
     """Start a new thread."""
     p = request.POST
     if p["subject"] and p["body"]:
         forum = Forum.objects.get(pk=pk)
         thread = Thread.objects.create(forum=forum, title=p["subject"], creator=request.user)
         Post.objects.create(thread=thread, title=p["subject"], body=p["body"], creator=request.user)
     return HttpResponseRedirect(reverse("ben:forum", args=[pk]))

 def reply(request, pk):
     """Reply to a thread."""
     p = request.POST
     if p["body"]:
         thread = Thread.objects.get(pk=pk)
         post = Post.objects.create(thread=thread, title=p["subject"], body=p["body"],
             creator=request.user)
     return HttpResponseRedirect(reverse("ben:thread", args=[pk]) + "?page=last")

私のURL:

 from django.conf.urls import patterns,include,url
 from django.contrib import admin
 from django.conf import settings

 urlpatterns = patterns('forum.views',
                        url(r'^$','main',name='main'),
                        url("^forum/(\d+)/$", "forum",name ="forum"),
                        url("^thread/(\d+)/$","thread",name = "thread"),
                        url(r"^post/(new_thread|reply)/(\d+)/$", "post",name = "post"),
                        url(r"^reply/(\d+)/$", "reply" , name ="reply"),
                        url(r"^new_thread/(\d+)/$", "new_thread" , name ="new_thread"),
 )
4

2 に答える 2

0

これはやや紛らわしい'('',)'ため、url引数リストは、テンプレートがであるかのように、単一の空の文字列で構成されていました{% url ben:forum '' %}。ビューコードがないと、それがどのように発生したかを知ることは不可能です。

 

すべてのビューを投稿したので、どれがエラーの原因であるかはまだわかりません:)ただし、私たちが知っていることは、どのビューもforum_pkコンテキスト変数をに渡さないということですrender_to_response

 

それpostですか?フォーラムのpkを理解し、それをテンプレートに渡す必要があります。

 def post(request, ptype, pk):
     """Display a post form."""
     action = reverse("ben:%s" % ptype, args=[pk])
     if ptype == "new_thread":
         title = "Start New Topic"
         subject = ''
         forum_pk = pk
     elif ptype == "reply":
         title = "Reply"
         thread = Thread.objects.get(pk=pk)
         forum_pk = thread.forum.pk
         subject = "Re: " + thread.title

     return render_to_response("forum/post.html", add_csrf(request, subject=subject,
         action=action, title=title, forum_pk=forum_pk))

post私はこのビューのデザインを承認しません。これは、pkによって異なることを意味しptypeます。それにもかかわらず、もしそうならptypenew_thread私たちはすでにforum_pkとして持っていpkます。の場合は、 byを取得し、スレッドのフォーラムをとしてreply取得する必要があります。Threadpkpkforum_pk

于 2013-02-17T13:39:38.633 に答える
0

追加に加えてforum_pk = pk

返信用に調整しました:

forum_pk = Thread.objects.get(pk = pk).forum.pk

于 2015-07-01T22:14:23.057 に答える