2014-09-28 53 views
1

我最近開始學習Django,並且遵循Django網站教程中給出的代碼示例。因此,我在該網站上創建了一個網站'mysite'和一個應用'books'。因此,在生成的目錄結構中有兩個'views.py'文件 - 一個在'mysite'文件夾中,另一個在'books'文件夾中,並且只有一個'urls.py'文件在'mysite'文件夾中。我的問題是以下內容 - 如何避免在兩個'views.py'文件中創建的函數名稱衝突?如果在這兩個文件中有兩個具有相同名稱的函數,那麼Django如何解析在'urls.py'文件中調用給定URL模式的函數?不同視圖中的相同功能 - Django

以下是我的目錄結構:

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 http://127.0.0.1:8000/hello被映射到'mysite'項目中的視圖函數。如果我現在有一個項目,比如說'mynewsite',那麼Django如何解決URL'http://127.0.0.1:8000/hello'到'mynewsite'的查看功能?我希望我的問題很清楚。

謝謝, Rakesh。

回答

1

在Python中您可以導入庫(像views.py這種情況下,文件)其中之一將是導致你所談論的,即

from books.views import my_view 
from mysite.views import my_view 
在這種情況下

名稱衝突,my_view只會被覆蓋。但是,你也可以做以下

import books.views 
import mysite.views 

在這種情況下,訪問進口來看,你將不得不使用全路徑,我。即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'), 
+0

更換謝謝@lisu,這解決了我的問題。但是我在原來的帖子中添加了一個相關的問題。你能幫我澄清一下嗎? – 2014-09-28 09:51:44

+0

嗯,我的困惑是以下 - 當我使用'django-admin.py startproject mysite'命令創建項目時,django是否僅將localhost:8000 URL用於此項目中的views/templates /文件?我可以使用相同的命令創建一個新項目,並使用相同的localhost:8000 URL來訪問我的新項目中的視圖嗎? – 2014-09-28 10:07:19

+0

@Rakesh K當你創建一個項目時,你可能使用runserver.py來運行django dev服務器。該服務器處理所有請求到127.0.0.1:8000,是的,它會一直指向你的項目。但是,如果您創建另一個項目,則只需將運行服務器運行的端口(請參閱runserver.py --help)更改爲8080,即可同時運行兩個項目。如果您不更改端口,則無法一次運行兩臺服務器。 – lisu 2014-09-28 10:10:49

相關問題