Я просто собираюсь начать с подсказки от себя :)
Используйте os.path.dirname () в settings.py, чтобы избежать жестко закодированных каталогов.
Не указывайте жесткий путь в вашем файле settings.py, если вы хотите запустить свой проект в разных местах. Используйте следующий код в settings.py, если ваши шаблоны и статические файлы находятся в каталоге проекта Django:
# settings.py
import os
PROJECT_DIR = os.path.dirname(__file__)
...
STATIC_DOC_ROOT = os.path.join(PROJECT_DIR, "static")
...
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR, "templates"),
)
Кредиты: я получил этот совет из фильма « Джанго с нуля ».
j = lambda filename: os.path.join(PROJECT_DIR, filename)
. Тогда вам просто нужно ввестиj("static")
.wontfix
решение.Установите Django Command Extensions и pygraphviz, а затем выполните следующую команду, чтобы получить действительно красивую визуализацию модели Django:
источник
Используйте декоратор django-раздражающего
render_to
вместоrender_to_response
.Отредактировано, чтобы указать, что возврат HttpResponse (например, перенаправление) приведет к короткому замыканию декоратора и будет работать так, как вы ожидаете.
источник
Есть набор пользовательских тегов, которые я использую по всем шаблонам моего сайта. Ища способ его автозагрузки (DRY, помните?), Я нашел следующее:
Если вы поместите это в модуль, который загружен по умолчанию (например, ваш основной urlconf), у вас будут теги и фильтры из вашего пользовательского модуля тегов, доступные в любом шаблоне, без использования
{% load custom_tag_module %}
.Переданный аргумент
template.add_to_builtins()
может быть любым путем к модулю; Ваш модуль пользовательских тегов не обязательно должен находиться в определенном приложении. Например, это также может быть модуль в корневом каталоге вашего проекта (например,'project.custom_tag_module'
).источник
Virtualenv + Python = спасатель жизни, если вы работаете над несколькими проектами Django и существует вероятность того, что все они не зависят от одной и той же версии Django / приложения.
источник
virtualenv myNewEnv --no-site-packages
;. myNewEnv/bin/activate
;pip install django
; И это просто работает!Не кодируйте свои URL жестко!
Вместо этого используйте имена URL и
reverse
функцию, чтобы получить сам URL.Когда вы определяете свои сопоставления URL-адресов, присвойте им имена.
Убедитесь, что имя уникально для каждого URL.
У меня обычно есть согласованный формат "project-appplication-view", например "cbx-forum-thread" для представления потока.
ОБНОВЛЕНИЕ (бесстыдно ворует дополнение аяза ):
Это имя можно использовать в шаблонах с
url
тегом .источник
url
тег ... Его позиция такова, что URL-адреса не должны меняться в любом случае (если вы хотите быть дружелюбными к вашему пользователей).{% url path.to.view.name arg1 arg2 %}
docs.djangoproject.com/en/dev/ref/templates/builtins/…reverse
вот так,environment.filters['url'] = django.core.urlresolvers.reverse
и вы можете использовать его в своих шаблонах примерно так:{{ 'view-name'|url(arg1, arg2)|e }}
(«e» необходимо для экранирования некоторых символов для включения в HTML)Используйте панель инструментов отладки django . Например, он позволяет просматривать все запросы SQL, выполняемые при просмотре рендеринга, и вы также можете просматривать трассировку стека для любого из них.
источник
Не пишите свои собственные страницы входа. Если вы используете django.contrib.auth.
Настоящий, грязный секрет заключается в том, что если вы также используете django.contrib.admin и django.template.loaders.app_directories.load_template_source есть в ваших загрузчиках шаблонов, вы также можете получить свои шаблоны бесплатно!
источник
Контекстные процессоры потрясающие.
Скажем, у вас другая модель пользователя, и вы хотите включить ее в каждый ответ. Вместо этого:
Контекстные процессы дают вам возможность передавать любую переменную в ваши шаблоны. Я обычно помещаю свой в
'my_project/apps/core/context.py
:В вашем
settings.py
добавьте следующую строку к вашемуTEMPLATE_CONTEXT_PROCESSORS
Теперь каждый раз, когда делается запрос, он
my_user
автоматически включает ключ.Также сигналы выигрывают.
Я написал пост в блоге об этом несколько месяцев назад, так что я просто собираюсь вырезать и вставить:
Из коробки Django дает вам несколько невероятно полезных сигналов. У вас есть возможность делать что-то до и после сохранения, инициализации, удаления или даже во время обработки запроса. Итак, давайте отойдем от концепций и продемонстрируем, как они используются. Скажем, у нас есть блог
Таким образом, вы захотите уведомить одну из многих служб pinging в блогах, о которых мы сделали, новое сообщение, перестроить кеш самых последних сообщений и написать в Твиттере об этом. Хорошо с сигналами у вас есть возможность делать все это без добавления каких-либо методов в класс Post.
Теперь мы определяем эту функцию и используем сигнал post_init для подключения функции к модели Post и выполнения ее после ее сохранения.
источник
Когда я только начинал, я не знал, что существует Paginator , убедитесь, что вы знаете о его существовании !!
источник
Используйте IPython, чтобы перейти к своему коду на любом уровне и отладить, используя возможности IPython. После того, как вы установили IPython, просто поместите этот код туда, где вы хотите отлаживать:
Затем обновите страницу, перейдите в окно вашего сервера запуска, и вы попадете в интерактивное окно IPython.
У меня есть фрагмент, настроенный в TextMate, поэтому я просто набираю ipshell и нажимаю вкладку. Я не мог жить без этого.
источник
ipdb
а затем просто набратьipdb.set_trace()
Запустите SMTP-сервер разработки, который будет просто выводить все, что отправлено на него (если вы не хотите фактически устанавливать SMTP на свой dev-сервер).
командная строка:
источник
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
.. которая распечатает письмо наmanage.py
выходе.Из документации django-admin :
Если вы используете оболочку Bash, рассмотрите возможность установки сценария завершения bash Django, который находится
extras/django_bash_completion
в дистрибутиве Django. Он включает команды табуляцииdjango-admin.py
иmanage.py
команды, так что вы можете, например ...django-admin.py
.sql
, затем [TAB], чтобы увидеть все доступные опции, названия которых начинаются сsql
.источник
./manage.py runserver_plus
Facilty , который поставляется с django_extensions поистине удивительным.Он создает расширенную страницу отладки, которая, помимо прочего, использует отладчик Werkzeug для создания интерактивных консолей отладки для каждой точки в стеке (см. Скриншот). Он также предоставляет очень полезный удобный метод отладки
dump()
для отображения информации об объекте / кадре.Для установки вы можете использовать pip:
Затем добавьте
'django_extensions'
в свойINSTALLED_APPS
кортежsettings.py
и запустите сервер разработки с новым расширением:Это изменит способ отладки.
источник
Мне нравится использовать отладчик Python pdb для отладки проектов Django.
Это полезная ссылка для изучения того, как его использовать: http://www.ferg.org/papers/debugging_in_python.html
источник
При попытке обмена данными между Django и другим приложением,
request.raw_post_data
это хороший друг. Используйте его для получения и пользовательской обработки, скажем, данных XML.Документация: http://docs.djangoproject.com/en/dev/ref/request-response/
источник
Используйте Jinja2 вместе с Джанго.
Если вы находите язык шаблонов Django чрезвычайно ограничивающим (как я!), Вам не нужно зацикливаться на нем. Django гибок, и язык шаблонов слабо связан с остальной частью системы, поэтому просто подключите другой язык шаблонов и используйте его для отображения ваших http-ответов!
Я использую Jinja2 , это почти как расширенная версия языка шаблонов django, он использует тот же синтаксис и позволяет использовать выражения в операторах if! больше не нужно создавать собственные if-теги, такие как
if_item_in_list
! Вы можете просто сказать%{ if item in list %}
, или{% if object.field < 10 %}
.Но это не все; у него есть много других функций, облегчающих создание шаблонов, но я не могу их здесь описать.
источник
Добавьте
assert False
в ваше представление код для выгрузки отладочной информации.источник
5 / 0
себя. Почему пять? Без понятия.Это добавляет к ответу выше об именах URL в Django и обратной рассылке URL .
Имена URL также могут эффективно использоваться в шаблонах. Например, для данного шаблона URL:
Вы можете иметь следующее в шаблонах:
источник
Поскольку «представления» Django должны быть только вызываемыми, которые возвращают HttpResponse, вы можете легко создавать представления на основе классов, как в Ruby on Rails и других средах.
Есть несколько способов создания представлений на основе классов, вот мой любимый:
Вы можете добавить все виды других вещей, таких как условная обработка запросов и авторизация в вашем базовом представлении.
Как только вы настроите ваши представления, ваш urls.py будет выглядеть примерно так:
источник
Вместо использования
render_to_response
для привязки вашего контекста к шаблону и его рендеринга (именно это обычно показывают документы Django) используйте общий видdirect_to_template
. Он делает то же самое, что иrender_to_response
он, но также автоматически добавляет RequestContext в контекст шаблона, неявно позволяя использовать обработчики контекста. Вы можете сделать это вручную с помощьюrender_to_response
, но зачем? Это просто еще один шаг, чтобы запомнить и еще один LOC. Помимо использования контекстных процессоров, наличие RequestContext в вашем шаблоне позволяет вам делать такие вещи, как:что очень полезно. На самом деле +1 на общие взгляды в целом. Документы Django в основном показывают их как ярлыки для того, чтобы даже не иметь файла views.py для простых приложений, но вы также можете использовать их внутри своих собственных функций просмотра:
источник
render
метод ярлыков из Django 1.3 ( docs.djangoproject.com/en/dev/topics/http/shortcuts/#render )У меня недостаточно репутации, чтобы ответить на данный комментарий, но важно отметить, что если вы собираетесь использовать Jinja , он НЕ поддерживает символ «-» в именах блоков шаблона, в то время как Django делает. Это вызвало у меня много проблем и потраченное время, пытаясь отследить очень неясное сообщение об ошибке, которое оно генерировало.
источник
Приложение веб- дизайна очень полезно при создании дизайна вашего сайта. После импорта вы можете добавить это для создания образца текста:
источник
django.db.models.get_model
позволяет вам получить модель, не импортируя ее.Джеймс показывает, насколько это удобно: «Советы по Django: лучше пишите теги шаблонов - Итерация 4» .
источник
Все знают, что есть сервер разработки, который вы можете запустить с помощью «manage.py runserver», но знаете ли вы, что существует представление разработки для обслуживания статических файлов (CSS / JS / IMG)?
Новички всегда озадачены, потому что Django не предлагает никаких способов обслуживания статических файлов. Это потому, что команда разработчиков считает, что это работа для реального веб-сервера.
Но при разработке вы можете не захотеть устанавливать Apache + mod_wisgi, это тяжело. Затем вы можете просто добавить следующее в urls.py:
Ваш CSS / JS / IMG будет доступен по адресу www.yoursite.com/site_media/.
Конечно, не используйте его в производственной среде.
источник
Я узнал об этом из документации для sorl-thumbnails приложения . Вы можете использовать ключевое слово «as» в тегах шаблона, чтобы использовать результаты вызова в другом месте вашего шаблона.
Например:
Это упомянуто мимоходом в документации шаблона тега Django, но только в отношении циклов. Они не кричат, что вы можете использовать это в другом месте (где угодно?).
источник
django.views.generic.list_detail.object_list - предоставляет все логические и шаблонные переменные для разбиения на страницы (одна из тех, что я написал, что это тысяча раз, теперь дружба). Оборачивая это учитывает любую логику, в которой вы нуждаетесь. Этот драгоценный камень сэкономил мне много часов отладки отдельных ошибок на моих страницах «Результаты поиска» и в процессе делает код более чистым.
источник
PyCharm IDE - это хорошая среда для написания кода и особенно для отладки со встроенной поддержкой Django.
источник
Используйте xml_models для создания моделей Django, которые используют бэкэнд API XML REST (вместо SQL). Это очень полезно, особенно при моделировании сторонних API - вы получаете тот же синтаксис QuerySet, к которому вы привыкли. Вы можете установить его из PyPI.
XML из API:
А теперь в питоне:
Он также может обрабатывать отношения и коллекции. Мы используем его каждый день в интенсивно используемом производственном коде, поэтому, хотя это бета-версия, она очень удобна в использовании. Он также имеет хороший набор заглушек, которые вы можете использовать в своих тестах.
(Отказ от ответственности: хотя я не являюсь автором этой библиотеки, я теперь коммиттер, сделавший несколько незначительных коммитов)
источник
Используйте миграцию базы данных. Используйте Юг .
источник