4

ModelAdmin のカスタム URL を追加したいのですが、Django が 1.5 でテンプレートの構文を変更したようです。ドキュメントが指摘したように、私はこの方法を試しましたが、残念ながらうまくいきません。

class VariableAdmin(admin.ModelAdmin):

    def get_urls(self):
         urls = super(VariableAdmin, self).get_urls()
         my_urls = patterns('',
                       url(r'^settings/([A-Za-z0-9]*)', self.admin_site.admin_view(self.settings), name="settings"))
         return my_urls + urls

    def settings(self, request, category):
         return render_to_response('variables.html', {"opts": Variable._meta}))

ここに私の変数.htmlがあります

{% load admin_urls %}
{% url opts|admin_urlname:'settings' %}

このコードは、次のようなエラーをスローします。

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

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

ビューの名前を変更して、アプリケーションとモデルの名前を含めてみてください。

...
my_urls = patterns('', url(r'^settings/([A-Za-z0-9]*)',
                   self.admin_site.admin_view(self.settings), 
                   name="common_variable_settings"))
...

admin_urlnameテンプレート フィルターは「完全な」名前を返します。ソース コードを参照してください。

@register.filter
def admin_urlname(value, arg):
    return 'admin:%s_%s_%s' % (value.app_label, value.module_name, arg)

したがって、間違いなく Your view という名前を付ける必要があります"appname_modulename_settings"。たぶん、正規表現を次のように変更してみてください。

r'^settings/([A-Za-z0-9]+/)?$'
于 2013-09-04T17:32:23.280 に答える