djangoを使用して完全なMTVを構成

2674 ワード

作者:zccst
まずプロジェクトとappの違いをはっきりさせる必要がある.
Projectとappの間にはいったい何が違うのでしょうか.違いは、1つは構成であり、もう1つはコードです.
1つのプロジェクトには、Django appとその構成が多数含まれています.
技術上、projectの役割はプロファイルを提供することであり、例えばどこでデータベース接続情報を定義し、インストールしたappリスト、TEMPLATE_DIRS、など.
1つのappはDjango機能のセットであり、通常はモデルとビューを含み、Pythonのパケット構造によって存在する.
たとえば、Django自体には、注釈システムや自動管理インタフェースなどのappが組み込まれています.appの1つのキーは、他のプロジェクトに移植しやすく、複数のプロジェクトで多重化されることです.
Djangoコードをどのように構築するかについては、迅速なルールはありません.簡単なWebサイトを構築するだけであれば、appが1つだけでいいかもしれません.しかし、電子商取引やコミュニティなどの多くの関連のないモジュールを含む複雑なサイトであれば、後で多重化するために、これらのモジュールを異なるappに分割する必要があります.
1,プロジェクトについては構成のみ

#1, setting.py 
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'web.manage_center',
)
#2, urls.py 
urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^medias/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    (r'^index$', 'web.index.index'),
    (r'^manage_center/', include('web.manage_center.urls')),
)

2,appについては,構成もあればコード導入もある.
manage_センターには独自のファイルがあります
__init__.py
models.py
urls.py
views.py
../templates/manage_center/
このアプリケーションには、複数のページが含まれる場合があります.一級メニューの下の二級メニューがほしいです.各2次メニューにはurlが複数含まれるため、さらに分割する必要があります.最後に各ページに分割するviewファイル(my 1_view.py)

#1, url.py 
my1_urlpatterns = patterns('web.manage_center.views',
    (r'^my1_index/$', 'my1_index'),
    #.............  url  
)
urlpatterns += my1_urlpatterns

#2, view.py 
from my1_views import *  #  ,  3         

#3, my1_views.py 
def aidc_index(request):
    render_dict = {}
    render_dict['session_tab'] = xx
    return render_to_response('manage_center/my1_index.html', render_dict)

#4, templates/manage_center/   my1_index.html  


3,actionを追加する
Actionには2つのタイプがあります.1つはページをレンダリングし、1つはデータを返すだけです.しかし、本質は同じで、urlマッピングです.

#   
<a href="manage_center/my1_func1"></a>

# urls.py 
urlpatterns = patterns('',
    (r'^my1_func1/$', 'my1_func1'),
)

# my1_view.py 
def my1_func1:
    render_to_response("xx/xx/xx.html",arr);