я сам программировать не умею но хочу научиться так как за это говорят платят хорошо.
мой знакомый (он делает саиты) посоветывал изучать фреймворк джанга на языке петон.
я изучаю его уже второй день но у меня остаются вопросы а гуглом я пользоваться не умею.
помогите!!!)))!
1. Настройка сервера. Делаю так (в одном каталоге):
./project/ - здесь код на питоне. здесь тестовый сервак запускаю (./manage.py runserver)
./templates/ - здесь шаблоны, чтобы дизайнеры вообще в project не лезли.
./www/ - здесь картинки, стили и вобщем вся статика.
И в nginx.conf:
server {
…
root …/www;
location ~ ^/(i|css|js) {
}
location / { # всё кроме статики проксирую на джаного-сервер
proxy_pass http://django; # здесь тестовый сервер, на продакшене видимо fastcgi какой-то
…
}
…
}
Это правильно или есть более рассово верные пути?
2. Несколько url под одну регулярку.
Есть на сайте модели - Country (страны) и City (города). Урлы у них такие:
site.loc/russia/ - страна
site.loc/moscow/ - город
то есть один каталог латиницей и "-".
На этапе разбора регуляркой никак выяснить страна это или город нельзя.
Делаю так:
# urls.py
from django.conf.urls.defaults import *
from hotel.hotels import views
urlpatterns = patterns('',
(r'^([a-z0-9_-]+)/$', views.country_or_city),
)
во вьюхах:
def country_or_city(request, url):
try:
ocountry = Country.objects.get(url=url)
except Country.DoesNotExist:
pass
else:
return country(request, ocountry)
try:
ocity = City.objects.get(url=url)
except City.DoesNotExist:
pass
else:
return city(request, ocity);
raise Http404
def country(request, url = None, ocountry = None):
…
def city(request, url = None, ocity = None):
…
Как разрулить ситуацию более изящно?
Мне правильным кажется решение:
urlpatterns = patterns('',
(r'^([a-z0-9_-]+)/$', views.country),
(r'^([a-z0-9_-]+)/$', views.city),
)
Если country не находит нужной страны, то отплёвывает какой-то результат типа "это не моё" и поиск нужной вьюхи идёт дальше.
В джанге есть что-либо подобное?
3. Контроллер слоя. Вот есть, допустим, сайт. Справа облака "по жанрам", "по годам". И так на нескольких страницах.
Это понятно - есть контент конкретной страницы, а есть общий слой, в котором отрисовываются эти страницы.
Как в шаблонах организовать деление на страница/шаблон понятно - наследование шаблонов там есть.
А как быть с вьюхо-контроллерами? Данные для этих облаков нужно из моделей выбирать и в шаблон передавать. Делать это для каждой вьюхи?
4. Конфиги для разных платформ. Есть вот settings.py и в нём конфигурация базы прописана.
А если у меня на локалке одни параметры, а на продакшене, где тот же код работает, другие.
Как это решается?
5. Конфиги для модулей. В settings.py настройки самого Django. А что делать с самописными модулями? Пихать каждому свой settings.py? Валить всё в глобальный settings.py?
6. Формирование адресов страниц.
Есть страница (новость): /news/2011/11/27/ololo/
Как правильно вставлять подобные ссылки?
Формировать из всего говна прямо в шаблоне?
Формировать во вьюхе?
Добавить в модель News метод getPageUrl()?
Душа просит какого-нибудь UrlBuilder'а, где бы все ссылки шаблонами прописывались.
Тем более, что шаблоны по сути уже есть - это регулярки в url.py.