2

djangoのテンプレートで逆URLを生成する際に問題が発生しました。私は数時間からそれを解決しようとしていますが、問題が何であるかわかりません。URL反転は、モデルとビューでうまく機能します。

# like this in models.py
@models.permalink
    def get_absolute_url(self):
        return ('entry', (), {
            'entry_id': self.entry.id,
        })

# or this in views.py
return HttpResponseRedirect(reverse('entry',args=(entry_id,)))

しかし、テンプレートで作成しようとすると、次のようなエラーが発生します。

/ entry / 1 /
のNoReverseMatchは、引数'(1L、)'およびキーワード引数'{}'が見つからない''add_comment''のリバースです。

私のファイル構造は次のようになります。

project/
├── frontend
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── settings.py
├── templates
│   ├── add_comment.html
│   └── entry.html
├── utils
│   └── with_template.py
└── wsgi.py

私のurls.py:

from project.frontend.views import *
from django.conf.urls import patterns, include, url

urlpatterns = patterns('project.frontend.views',

    url(r'^entry/(?P<entry_id>\d+)/', 'entry', name="entry"),
    (r'^entry_list/', 'entry_list'),

次に、entry_list.html:

{% extends "base.html" %}
{% block content %}
    {% for entry in entries %}
            {% url 'entry' entry.id %}
    {% endfor %}
{% endblock %}

私が持っているviews.py:

@with_template
def entry(request, entry_id):
    entry = Entry.objects.get(id=entry_id)
    entry.comments = entry.get_comments()
    return locals()

with_templateはデコレータをフォローしています(ただし、これは当てはまらないと思います):

class TheWrapper(object):
    def __init__(self, default_template_name):
        self.default_template_name = default_template_name

    def __call__(self, func):
        def decorated_func(request, *args, **kwargs):
            extra_context = kwargs.pop('extra_context', {})
            dictionary = {}
            ret = func(request, *args, **kwargs)
            if isinstance(ret, HttpResponse):
                return ret
            dictionary.update(ret)
            dictionary.update(extra_context)
            return render_to_response(dictionary.get('template_name',
                                                     self.default_template_name),
                                      context_instance=RequestContext(request),
                                      dictionary=dictionary)
        update_wrapper(decorated_func, func)
        return decorated_func

if not callable(arg):
    return TheWrapper(arg)
else:
    default_template_name = ''.join([ arg.__name__, '.html'])
    return TheWrapper(default_template_name)(arg)

何か考えがありますか、何が問題を引き起こす可能性がありますか?よろしくお願いします!


編集: 私はちょうど実験をしました。残せるものはすべてコメントしました:urls.py

# -*- coding: UTF-8 -*-
from justmetyou.frontend.views import *
from django.conf.urls import patterns, include, url
urlpatterns = patterns('justmetyou.frontend.views',
    url(r'^entry/(?P<entry_id>\d+)/', 'entry', name="entry"),
)

views.py

# -*- coding: UTF-8 -*-
from justmetyou.frontend.models import *
from django.shortcuts import render_to_response, get_object_or_404
def entry(request, entry_id):
    entry = Entry.objects.get(id=entry_id)
    return render_to_response('entry.html', {'entry':entry})

entry.html

{% extends "base.html" %}
{% block content %}
{% url 'entry' 1 %}
{% endblock %}

そして何も変わっていません。いつも同じエラーが発生します。この単純なコードではすべてが正常に見えるため、今ではもっと混乱しています。サーバーやこのようなsmthのような外部のものの問題である可能性があると思いますか...?わからない…

4

1 に答える 1

2

Django 1.3を使用していて、電話をかけなかったと思われます{% load url from future %}

したがって、代わりに'URLの名前を避けてみてください。

{% url entry 1 %}
于 2012-10-20T01:17:45.103 に答える