NoReverseMatch Django论坛

时间:2015-07-01 19:36:04

标签: django django-templates django-urls

/ forum /

中的NoReverseMatch

反向找不到''带参数'('',)'和关键字参数'{}'。尝试了0种模式:[]

使用教程:http://www.lightbird.net/dbe/forum1.html

我正在使用list.html - 我不确定这是否是放置此代码的正确位置:

{% extends "base.html" %}

{% block content %}

<!-- Forums -->
<div id="list">
  <table border="0" cellpadding="4" width="100%">
    <tr>
      <td></td>
      <td>Posts</td>
      <td>Last post</td>
      <td></td>
    </tr>
    {% for forum in forums %}
    <tr>
      <td {% if forloop.last %} class="last" {% endif %}>
        {{ forum.title }}
      </td>
      <td {% if forloop.last %} class="last" {% endif %}>
        {{ forum.num_posts }}
      </td>
      <td {% if forloop.last %} class="last" {% endif %}>
        {{ forum.last_post.short|linebreaksbr }}
      </td>

      <td {% if forloop.last %}class="last" {% endif %}>
        <a class="button" href="{% url forum.views.forum forum_pk %}">
          VIEW</a>
      </td> -->

    </tr>
  </table>
  {% endfor %}
</div>
{% endblock %}

以我的观点:

from django.shortcuts import render, render_to_response
from django.core.urlresolvers import reverse
from dogslikeme.settings import MEDIA_ROOT, MEDIA_URL
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.core.context_processors import csrf

from .models import *

# Create your views here.
def main(request):
    """Main listing"""
    forums = Forum.objects.all()
    return render_to_response('forum/list.html', {'forums':forums,
        'user':request.user})

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"))
    except ValueError: page = 1

    try:
        items = paginator.page(page)
    except(InvalidPage, EmptyPage):
        items = paginator.page(paginator.num_pages)
    return items

def forum(request, pk):
    """Listing of threads in a forum"""
    threads = Threads.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
    t = Thread.objects.get(pk=pk)
    return render_to_response('forum/thread.html', add_csrf(request,
        posts=posts, pk=pk, title=title, media_url=MEDIA_URL,
        forum_pk=t.forum.pk))

def post(request, ptype, pk):
    """Display a post form."""
    action = reverse("forum.views.%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, forum_pk=forum_pk))

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("forum.views.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("forum.views.thread",
        arg=[pk]) + "?page=last")

和urls.py:

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

from . import views

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'forum.views.main'),
    url(r'^forum(\d+)/$', 'forum.views.forum'),
    url(r'^thread/(\d+)/$', 'forum.views.thread'),

    url(r'^post/(new_thread|reply)/(\d+)/$', 'forum.views.post'),
    url(r'^reply/(\d+)/$', 'forum.views.reply'),
    url(r'^new_thread/(\d+)/$', 'forum.views.new_thread'),
]

然而,在这一行得到了无反向匹配错误:          在HTML中。我不知道forum_pk应该来自哪里或者为什么会发生错误。我尝试更新主视图也包括forum.pk但我不知道应该来自哪里。

我也很不清楚我应该使用哪些html页面来遵循本教程,如果它应该是分开的。

1 个答案:

答案 0 :(得分:1)

在您的模板上,请尝试以下方式:

<a class="button" href="{% url 'forum.views.forum' forum.pk %}">

forum_pk替换为forum.pk,并将第一个参数括在引号中:'forum.views.forum'