2014-09-28 3 views
1

Недавно я начал изучать Django и следую примерам кода, приведенным в учебнике сайта Django. Соответственно, я создал сайт «mysite» и «книги» приложения на этом сайте. Следовательно, в результирующей структуре каталогов есть два файла «views.py» - один в папке «mysite», а другой в папке «books» и есть только один файл «urls.py» - только в папке «mysite». Мой вопрос следующий: как избежать конфликтов имен для функций, которые я создаю в двух файлах views.py? Если в обоих файлах есть две функции с одинаковым именем, как Django разрешает, какую функцию вызывать для данного шаблона URL в файле 'urls.py'?Те же функции в разных представлениях - 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, поперек проекты? Я имею в виду, что в настоящее время URL-адрес http://127.0.0.1:8000/hello сопоставляется с функцией просмотра в проекте «mysite». Что делать, если у меня теперь есть еще один проект, скажем, «mynewsite», как Django разрешит URL-адрес http://127.0.0.1:8000/hello функции просмотра «mynewsite»? Надеюсь, мой вопрос ясен.

Thanks, 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, что решить мою проблему. Но я добавил связанный с этим вопрос на мой оригинальный пост. Не могли бы вы помочь мне прояснить это? –

+0

Ну, моя путаница заключается в следующем: это когда я создаю проект, используя команду django-admin.py startproject mysite, использует ли django URL-адрес localhost: 8000 только для представлений/шаблонов/файлов из этого проекта? Могу ли я создать новый проект с использованием той же самой команды и использовать один и тот же URL-адрес localhost: 8000 для доступа к представлениям из моего нового проекта? –

+0

@ Rakesh K Когда вы создаете проект, вы, вероятно, запускаете сервер django dev, используя runerver.py. Этот сервер обрабатывает все запросы до 127.0.0.1:8000 и да, он всегда будет указывать на ваш проект. Однако, если вы создаете другой, вы можете просто изменить порт, на котором запускается сервер запуска (см. Runningerver.py --help), до 8080, и вы можете одновременно запускать два проекта. Если вы не измените порт, вы не сможете одновременно запускать два сервера. – lisu

Смежные вопросы