Django: Разбивание представлений

Это - действительно просто вопрос "о лучших практиках"...

Я нахожу, что При разработке приложения, часто заканчиваю с большим количеством представлений.

Это - обычная практика для разбивания этих представлений в несколько файлов представления? Другими словами... вместо того, чтобы просто иметь views.py, действительно ли распространено иметь views_1.py, views_2.py, views_3.py (но названный более соответственно, возможно, по категориям)?

22
задан Brant 20 April 2010 в 14:05
поделиться

3 ответа

Разделение views.py

Большая часть вашего кода, вероятно, ожидает, что ваши представления будут доступны как myapp.views.viewname . Один из способов, которым я видел, как люди разделяют свои взгляды, но сохраняют это имя Python, - это создание каталога views / . views / __ init __. Py будет иметь:

from .foo_views import *
from .bar_views import *
from .baz_views import *

Затем в views / foo_views.py введите:

def foo_detail(request, ...):
    # your code here

def foo_list(request, ...):
    # your code here

def your_other_view(...):
    # ...

и т. Д.Итак, вы перемещаете все из views.py в файлы в этом каталоге, делаете __ init __. Py , удаляете views.py , и все готово.

Затем, когда вы импортируете myapp.views , myapp.views.foo_detail будет ссылаться на функцию, которую вы определили в views / foo_views.py .

Разделение других модулей

Эта стратегия также должна работать для admin.py и т. Д. Но если вы хотите разделить models.py таким образом, вам понадобится добавить app_label = 'your_app_name' в класс Meta: всех ваших моделей. Например, unicorn_app / models / unicorns.py может иметь такую ​​запись:

class Unicorn(models.Model):
    description = models.CharField(max_length=80)

    class Meta:
        app_label = 'unicorn_app'

(В противном случае Django считает, что модель Unicorn является частью приложения Django под названием «models ", что приводит к сбоям в работе административного сайта. Текущая версия до 1.6 - грядущая версия 1.7 уберет это требование .)

33
ответ дан 29 November 2019 в 04:46
поделиться

Другой вариант - переместить некоторые функции в одно или несколько приложений. Это позволит вам перемещать также формы и шаблоны и сохранять структурированность. Вам не обязательно перемещать модели, что избавляет вас от миграции моделей и данных.

Например, у вас может быть следующая структура:

main_app/
  |_models.py
  |_views.py
  |_forms.py
  |_urls.py
  |_templates/

sub_app_1/
  |_views.py
  |_forms.py
  |_urls.py
  |_templates/

sub_app_2/
  |_views.py
  |_forms.py
  |_urls.py
  |_templates/
3
ответ дан 29 November 2019 в 04:46
поделиться

В качестве общего правила подумайте о удобочитаемости и ремонтопригодности : "views.py" по умолчанию - это просто предложение , сделанное начальным шаблоном - вы делаете не надо его придерживаться.

Обычно трудно поддерживать файлы с тысячами строк кода, поэтому я обычно пытаюсь разбить большие модули на более мелкие.
С другой стороны, разделение должно иметь смысл - разделение связанных функций на несколько файлов с большим количеством операций импорта может еще больше затруднить обслуживание.

Наконец, вы также можете подумать о совершенно других способах упрощения вашего приложения.
Вы видите повторяющийся код? Может, какой-то функционал можно было перенести в совсем другое приложение? И так далее.

4
ответ дан 29 November 2019 в 04:46
поделиться