Всерьез столкнулся с Django, и не так сложна сама разработка, как непонятны многие особенности работы и мелочи. Очень надеюсь что коллективный разум ЛОРа даст мне полезные советы. Итак, вопросы:
1. Использую в качестве сервера Nginx + uwsgi - годная ли связка, или сейчас модно подымать джангу как-то по-другому?
2. Путаюсь с «проектом» (который django-admin.py startproject) и «приложением» (которое manage.py startapp appname).
Мне нужно чтобы при входе на http://domain.com/ отображалось мое приложение, которое внутри проекта, и чтобы в этом приложении работать с URL-ами от корня, а не от какого-то префикса. Сейчас все сделано таким вот образом:
nginx.conf:
# django
upstream django {
ip_hash;
server unix:/tmp/uwsgi.sock;
}
server {
server_name domain.com;
listen 192.168.2.5;
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
"-M -L -p 4 --python-path /usr/local/www/myproject/ --chdir /usr/local/www/myproject/ -w django_wsgi"
#!/usr/local/bin/python
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/eggs'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
В /usr/local/www/myproject/ лежит settings.py, в котором указаны параметры базы Mysql, все такое, и в кортеже INSTALLED_APPS добавлено мое приложение. Я так понимаю, что нужно верно написать urls.py, чтобы получить то, что я хочу. Сейчас корневой /usr/local/www/myproject/urls.py имеет вид:
urlpatterns = patterns('',
(r'^myapp/', include('MyApp.urls')),
)
urlpatterns = patterns('',
(r'^$', index),
(r'^domains/', domains),
(r'^auth/', auth),
)
3. Опять же вопрос правильности. Встречал в разной документации несколько разных способов передачи данных в шаблон. Первый к примеру такой:
return render_to_response('template.html', { словарь-с-данными })
mytemplate = loader.get_template("template.html")
mycontext = Context({ словарь-с-данными })
return HttpResponse(mytemplate.render(mycontext))
4. View-функция может возвращать допустим не только отрендереную страницу, а и редирект. Сейчас для редиректов использую
return redirect('/url/')
Буду благодарен, особенно за ответ на второй вопрос.