LoginSignup
61
63

More than 5 years have passed since last update.

Djangoでモジュールを複数ファイルで構成する

Posted at

タイトルの用語とかが正しいのかはたいへん疑問。。。。。。

自分向けの備忘録

目的

Djangoを利用したプログラムを作成する際に、
アプリケーションの規模が大きくなった際に都合が良いように、
ビューやモデルなどのモジュール?を複数ファイルに分割するための手順を整理する。

前提

環境は以下の通り

Ubuntu 16.04
python 3.5.2
django 1.10.5

手順

ここではmodels.pyを複数ファイルに分割してみる。

modelを複数ファイルに分割

初期状態
__init__.py
admin.py
apps.py
migrations
models.py
tests.py
views.py

ここではmodels.pyを1ファイル=1モデルクラスとできるように修正する。

modelsディレクトリと__init__.pyファイルを準備
__init__.py
admin.py
apps.py
migrations
models
    __init__.py
    task.py
tests.py
views.py

上のコードのようにmodels.pyを削除しmodelsディレクトリを準備し、
その中に__init.py__ファイルとモデルクラスを記述したファイル
(ここでは、task.py)を作成する。

task.py
from django.db import models


class Task(models.Model):
    """
    Task to do.
    """
    name = models.CharField(max_length=30)
    startTime = models.DateTimeField()
    endTime = models.DateTimeField()
    memo = models.CharField(max_length=200)
__init__pyファイル
from webui.models.task import Task # 上で作成したクラスをインポートする

viewを複数ファイルに分割

ファイルの分割方法は同じ。
1. views.pyを削除
2. viewsディレクトリを作成
3. viewsディレクトリ配下に適当なファイルを作成
3. views/__init__.pyファイルを作成
4. __init__.pyファイルで3.で作ったファイル内のクラス、メソッドをインポート
 

ファイル分割
__init__.py
admin.py
apps.py
migrations
models
    __init__.py
    task.py
tests.py
views
    __init__.py
    task_view.py

urls.pyへの記述

viewモジュールについてはurls.pyへの記述が必要となる

メソッドベースでビューを定義している場合

viewsを複数ファイルに分ける
のようにしている場合は以下の通り

urls.py(メソッドベース)
urlpatterns = [
    ...,
    url(r'^適当な正規表現', アプリケーション名.views.ファイル名.メソッド名)
]

from ... importで指定する方法も本項の冒頭に上げたリンク先では
記述しているけれども、同じメソッド名が指定できなくなるので上のコード例を
用いたほうが多分良いと思う。

クラスベースでビューを定義している場合

Django の views.py をクラスにする にあるようにクラス単位の場合は
以下のようになる。

urls.py(クラスベース)
urlpatterns = [
    ...
    url(r'^/URLの正規表現/$', アプリケーション名.views.viewのクラス名.as_view()),
    ...
]

こちらもメソッドベースの場合と同様にfrom ... importを宣言することで
パッケージ名の記述は不要になるはず。

参考資料

Django の views.py をクラスにする
viewsを複数ファイルに分ける

61
63
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
63