【问题标题】:Same functions in different views - Django不同视图中的相同功能 - Django
【发布时间】:2014-09-28 09:31:22
【问题描述】:

我最近开始学习 Django,并按照 Django 网站教程中给出的代码示例进行操作。因此,我在该站点中创建了一个站点“mysite”和一个应用程序“books”。因此,生成的目录结构中有两个“views.py”文件——一个在“mysite”文件夹中,一个在“books”文件夹中,只有一个“urls.py”文件——仅在“mysite”文件夹中。我的问题如下 - 如何避免在两个“views.py”文件中创建的函数的名称冲突?如果两个文件中有两个同名的函数,Django 如何解析在 'urls.py' 文件中为给定 URL 模式调用哪个函数?

以下是我的目录结构:

C:.
│   manage.py
│
├───books
│       admin.py
│       admin.pyc
│       models.py
│       models.pyc
│       tests.py
│       views.py
│       views.pyc
│       __init__.py
│       __init__.pyc
│
└───mysite
        base.html
        base_blog.html
        base_welcome.html
        currdate.html
        settings.py
        settings.pyc
        urls.py
        urls.pyc
        views.py
        views.pyc
        wsgi.py
        wsgi.pyc
        __init__.py
        __init__.pyc

另一个相关问题 - 如果我有多个项目(如“mysite”)并且这些项目中有不同的应用程序,我如何区分项目中的 URL?我的意思是,目前,URL http://127.0.0.1:8000/hello 被映射到“mysite”项目中的视图函数。如果我现在还有一个项目,比如“mynewsite”,Django 将如何将 URL http://127.0.0.1:8000/hello 解析为“mynewsite”的视图函数?我希望我的问题很清楚。

谢谢, 拉克什。

【问题讨论】:

    标签: django


    【解决方案1】:

    在 python 中,您可以导入库(在本例中为文件,如 views.py),其中一个会导致您正在谈论的名称冲突,即

    from books.views import my_view
    from mysite.views import my_view
    

    在这种情况下,my_view 将被简单地覆盖。但是,您也可以执行以下操作

    import books.views
    import mysite.views
    

    在这种情况下,要访问导入的视图,您必须使用完整路径,即。 e. books.views.my_view,因此不存在名称冲突。

    至于您的其他问题,请考虑以下 urls.py 内容:

    urlpatterns = patterns('',
        url(r'^$', mysite.views.my_view, name='index'),
    

    你可以替换成

    urlpatterns = patterns('',
        url(r'^$', books.views.my_view, name='index'),
    

    【讨论】:

    • 谢谢@lisu,这解决了我的问题。但是我在原始帖子中添加了一个相关问题。你能帮我澄清一下吗?
    • 好吧,我的困惑如下 - 当我使用 'django-admin.py startproject mysite' 命令创建项目时,django 是否仅将 localhost:8000 URL 用于视图/模板/这个项目的文件?我可以使用相同的命令创建一个新项目并仍然使用相同的 localhost:8000 URL 来访问我的新项目中的视图吗?
    • @Rakesh K 创建项目时,您可能正在使用 runserver.py 运行 django 开发服务器。该服务器处理对 127.0.0.1:8000 的所有请求,是的,它将始终指向您的项目。但是,如果您创建另一个,您只需将运行运行服务器的端口(请参阅 runserver.py --help)更改为 8080,您就可以同时运行两个项目。如果不更改端口,您将无法同时运行两台服务器。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2020-01-30
    • 2010-10-29
    • 2020-07-06
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多