在管理命令中使用Django reverse()生成管理员URL无效

-1 投票
1 回答
657 浏览
提问于 2025-04-18 02:25

我有一个项目(myproj),里面有几个应用。其中一个应用(myapp)有一个管理命令,我在使用上遇到了一些困难。我希望这个命令能发送一封邮件,里面包含指向管理网站上模型实例的链接。但是我总是收到一个错误信息:ImproperlyConfigured: The included urlconf XXX doesn't have any patterns in it(这里的XXX是某个数字)。

其他的功能似乎都正常。当我访问'/admin/myapp'页面时,所有的模型都能正常显示,我也可以对它们进行各种操作。所以看起来我的网址模式没有问题。我感觉这个管理命令没有加载网址模式,这就是它失败的原因,但我不知道该怎么让它加载。

以下是一些简化的代码。所有代码都是在python 2.7.6和Django 1.5.5上运行的。

myproj/myproj/urls.py

from __future__ import absolute_import, unicode_literals
from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^auth/', include('django.contrib.auth.urls')),
    url(r'^admin/', include(admin.site.urls)),

    # Other app includes, but none for myapp as it is strictly admin
)

myproj/myapp/urls.py

from __future__ import absolute_import, unicode_literals
from django.conf.urls import patterns, url

urlpatterns = patterns('',

)

myproj/myapp/management/commands/my_command.py

from __future__ import absolute_import, unicode_literals
from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
    def handle(self, *args, **options):
        from ... import do_stuff
        do_stuff()

myproj/myapp/__init__.py

from __future__ import absolute_import, unicode_literals
# Tried: also reverse_lazy, just delays the exception
from django.core.urlresolvers import reverse

def do_stuff():
    # Tried here: import myproj.urls

    # Work...
    # Exception here
    a_url = reverse('admin:myapp_mymodel_change', a_model.pk)
    # Work...

    # Send email here
    # Exception here if using reverse_lazy

1 个回答

1

唉,我真是个傻瓜。应该是:

reverse('admin:myapp_mymodel_change', args=(a_model.pk,))

撰写回答