Django - 包括应用程序网址

Posted

技术标签:

【中文标题】Django - 包括应用程序网址【英文标题】:Django - include app urls 【发布时间】:2013-03-30 21:14:21 【问题描述】:

我有以下结构(Django 1.4):

containing_dir/
    myproject/
        myapp1/
        myapp2/
        myapp3/

myproject、myapp1、myapp2 和 myapp3 都有 init.py,所以它们都是模块。

在 manage.py(包含目录下)我有 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

在 myproject.settings 我定义:

[..]
ROOT_URLCONF = 'myproject.urls'
INSTALLED_APPS = (   
    [..]
    'myproject.myapp1',
    'myproject.myapp2',
    'myproject.myapp3',
)
[..]

在 myapp1.urls.py 我定义:

urlpatterns = patterns('myapp1',
    url(r'^agent/$', 'views.agent',    name='agent')
)

我尝试将它导入 myproject.urls 我尝试像这样导入 myapp1 url:

(r'^myapp1/', include('myproject.myapp1.urls'))

但每当我尝试加载 localhost:8000/myapp1/agent 时,我都会得到

Exception Value: No module named myapp1

我认为是从 withing myapp1.urls 中抛出的

有什么帮助吗?谢谢

【问题讨论】:

【参考方案1】:

你必须有一个

__init__.py

“myproject”目录中的文件。当你说:

(r'^myapp1/', include('myproject.myapp1.urls'))

你说“myproject”(以及 myapp1)是一个 python 包。

【讨论】:

【参考方案2】:

在 myproject.settings 中进行以下更改:

INSTALLED_APPS = (   
[..]
'myapp1',
'myapp2',
'myapp3',
)

【讨论】:

【参考方案3】:

ROOT_URLCONF 是否需要指向myproject.urls

如果您将应用程序放在myproject 内,则需要使用正确的view prefix。

urlpatterns = patterns('myproject.myapp1',
...

【讨论】:

@pistacchio 然后您很可能需要为应用程序创建一个安装脚本,以便将它们添加到 python 路径中。或者手动添加它们。【参考方案4】:

试试:

urlpatterns = [
    ...
    url(r'^app_name/', include('app_name.urls', namespace='project_name'))
    ...
]

【讨论】:

【参考方案5】:

要解决这个问题,只需在 PyCharm 中选择“myproject”目录并将其设置为源根目录。 您的项目不知道它必须从哪个根目录搜索给定的应用程序。 它为我解决了这个问题。 谢谢。

【讨论】:

以上是关于Django - 包括应用程序网址的主要内容,如果未能解决你的问题,请参考以下文章

Django-限制用户访问网址

Django 动态网址

当我在基于类的视图中应用过滤器时,如何在 django 中使用分页分页。网址总是不断变化我如何跟踪网址

Django URL,使用 ?在网址中

win10搭建django2.1.7开发环境,定义简易视图及网址

Django urls.py误认为两个关闭网址