【问题标题】:Django NameError [app name] is not definedDjango NameError [应用程序名称] 未定义
【发布时间】:2011-06-26 04:52:03
【问题描述】:

尝试将 django-grappelli 用于我的管理主题,安装非常具有挑战性。在我的 urls.py 中遇到以下内容:

NameError .. name 'grappelli' is not defined

错误就行了

(r'^grappelli/', include(grappelli.urls))

用 pip 安装了 grappelli,并且 grappelli 在我的 sites-packages 目录中。添加到我的INSTALLED_APPS,运行syncdb,尝试将grappelli 添加到我的pythonpath,但没有运气。如果我在 urls.py 中导入 grappelli,错误会变为 AttributeError - 'module' has no attribute 'urls'

我们非常感谢您提出建议或任何形式的帮助。

【问题讨论】:

    标签: python django django-grappelli


    【解决方案1】:

    行应该是:

    (r'^grappelli/', include('grappelli.urls'))
    

    include 要么采用 urls 模块的路径,要么可以是返回 url 模式的 python 对象 http://docs.djangoproject.com/en/dev/topics/http/urls/#include

    所以您的两个选项是上面的行(url 的路径)或

    from grappelli.urls import urlpatterns as grappelli_urls
    
    (r'^grappelli/', include(grappelli_urls)),
    

    至于错误,它是 Python 中要调试的最直接的错误之一:grappelli 未定义,如...未定义。

    想象一下在壳里:

    >>> print grappelli
    exception: variable undefined
    >>> grappelli = 'hello' # we just defined grappelli
    >>> print grappelli
    'hello'
    

    【讨论】:

    • 感谢@Yuji - 我不敢相信我没有尝试过。看起来应该很明显,但是当导入 grappelli 并没有给我带来任何麻烦时,我被绊倒了。假设将 grappelli 添加到我的 installed_apps 使我可以访问该对象作为变量。只要它允许我就会接受。
    • NP!我确实注意到 grappelli 文档建议您 include(grappelli.urls) :) 错误。
    • 重要的是要指出“grappelli.urls”周围的引号是解决此问题的原因......无论出于何种原因。
    • 好吧,我没有使用 grappelli,但我在使用另一个包时遇到了同样的错误。我尝试导入包,然后引用 package.urls 但这仍然不起作用,直到我用引号括起来,然后我什至不需要导入该包。无论如何,您的答案和下面的答案提供了一个有效的解决方案。 :-)
    • 我也遇到过类似的问题,但我的解决方法是在我的 uWSGI conf 文件中将“chdir = /var/django/zhanxw/”更改为“chdir = /var/django/zhanxw”(删除斜杠)。希望这对某人有帮助。
    【解决方案2】:

    我知道这已经有一年多了,但当我遇到同样的问题时,它是 Google 上的最佳结果之一。

    除了从gralli.urls中导入urlpatterns,还可以更改include()语句

    (r'^grappelli/', include(grappelli.urls))
    

    (r'^grappelli/', include('grappelli.urls'))
    

    这也让我有点失望,直到我注意到需要在 include 语句中引用 package.urls。

    【讨论】:

      【解决方案3】:

      您可能希望在 urls.py 中导入以下内容:

      from django.conf.urls import include
      

      【讨论】:

        【解决方案4】:

        在声明路线时,您忘记引用表达式。

        grappelli.urls 替换为'grappelli.urls' 以使其工作!

        那么正确的语法应该是:

        (r'^grappelli/', include('grappelli.urls'))
        

        【讨论】:

          猜你喜欢
          • 2014-08-26
          • 1970-01-01
          • 2022-10-16
          • 2023-03-11
          • 2018-07-14
          • 2017-12-25
          • 2021-07-17
          • 2012-05-13
          • 2017-08-17
          相关资源
          最近更新 更多