Django,NoReverse匹配

2024-05-15 10:37:12 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我完成了我的应用程序,有几个模型。这个特殊的错误只出现在某些值上。示例:每个用户都注册了一个课程和一年。因此,在一个页面中,我试图显示所选年度属于该课程的所有模块。当用户在year 3学习时,它就工作了。当它是year 2时,它抛出那个错误。你知道吗

Reverse for 'module_details_upcoming' with arguments '(10L,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['studies/module/(?P<module_id>\\d)/upcoming/$']

在错误页面中,它抱怨{% url "module_details_upcoming" module.id %},我猜也是{% url "module_details_previous" module.id %}。你知道吗

下面你可以看到我的代码:

你知道吗视图.py你知道吗

def modules(request):
    if request.user.is_authenticated():
        user_id = request.user.id

        try:
            studying_course = Student.objects.get(user__id=user_id).course
            studying_year = Student.objects.get(user__id=user_id).year
        except Student.DoesNotExist:
            return HttpResponseRedirect(reverse('step2'))

        try:
            modules_list = Module.objects.filter(course=studying_course,year=studying_year).exclude(name="school")
        except Module.DoesNotExist:
            modules_list = None
        # import pdb; pdb.set_trace()
        return render_to_response("studies/modules.html", {'course': studying_course, 'year': studying_year, 'modules': modules_list,},  RequestContext(request))

    else:
        return HttpResponseRedirect(reverse('home'))

def module_details_upcoming(request, module_id):
    if request.user.is_authenticated():
        user_id = request.user.id
        dated = True

        try:
            studying_course = Student.objects.get(user__id=user_id).course
            studying_year = Student.objects.get(user__id=user_id).year
        except Student.DoesNotExist:
            return HttpResponseRedirect(reverse('step2'))

        try:
            module = Module.objects.get(id=module_id)
        except Module.DoesNotExist:
            module = None

        now = datetime.datetime.now()
        events = Event.objects.filter(module__in=module_id,date__gte=now).order_by('date')

        paginator = Paginator(events, 5)
        try:
            page = int(request.GET.get("page", '1'))
        except ValueError:
            page = 1

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

        return render_to_response("studies/module.html", {'module': module, 'events': events, 'posts': posts, 'dated': 'dated'},  RequestContext(request))
    else:
        return HttpResponseRedirect(reverse('home'))

你知道吗网址.py你知道吗

urlpatterns = patterns('',
    url(r'^modules/$', 'studies.views.modules', name="modules"),
    url(r'^module/(?P<module_id>\d)/upcoming/$', 'studies.views.module_details_upcoming', name="module_details_upcoming"),
    url(r'^module/(?P<module_id>\d)/previous/$', 'studies.views.module_details_previous', name="module_details_previous"),
)

模板文件:

            {% if modules %}
                <p>Below you can find all your modules for this year.</p>
                <table class="table table-hover">
                    <th>Code</th>
                    <th>Name</th>
                    <th>Tasks/Events</th>
                {% for module in modules %}
                    <tbody>
                        <td>{{ module.code }}</td>
                        <td>{{ module.name }}</td>
                        <td><a href="{% url "module_details_upcoming" module.id %}">Upcoming</a> / <a href="{% url "module_details_previous" module.id %}">Previous</a></td>
                    </tbody>
                {% endfor %}
                </table>
            {% else %}
                <p>Oops! It seems that there are no modules for {{ course.name }} in our records. Please contact your school office.</p>
            {% endif %}

Tags: modulesidurlobjectsrequestdetailsyearstudent
1条回答
网友
1楼 · 发布于 2024-05-15 10:37:12

您需要在url标记中传递关键字参数module_id

{% url "module_details_upcoming" module_id=module.id %}

也可以看到类似的问题:NoReverseMatch with {% url ... %} and keyword args

UPD:你实际上在url中捕获了一个数字。因为for year 3module_id10(两位数),所以不能完成反向操作。你知道吗

替换:

url(r'^module/(?P<module_id>\d)/upcoming/$', 'studies.views.module_details_upcoming', name="module_details_upcoming"),
url(r'^module/(?P<module_id>\d)/previous/$', 'studies.views.module_details_previous', name="module_details_previous"),

使用(观察\d+而不是\d):

url(r'^module/(?P<module_id>\d+)/upcoming/$', 'studies.views.module_details_upcoming', name="module_details_upcoming"),
url(r'^module/(?P<module_id>\d+)/previous/$', 'studies.views.module_details_previous', name="module_details_previous"),

相关问题 更多 >