私は自分でDjango
を学習しています。普通のPythonクラスをどこに実装するのかわかりません。私が意味することは、私が書いたPythonクラスはどこに行くのか分かりません。別のファイルに入れてviews.py
にインポートするか、views.py
ファイル内に実装されているクラスは同じですか?DjangoでPythonクラスを実装する場所は?
例を実装したいのですが、モジュール内の別のファイルでこれを実行するか、またはviews.py
ファイル内の関数を実装するだけですか?
私は自分でDjango
を学習しています。普通のPythonクラスをどこに実装するのかわかりません。私が意味することは、私が書いたPythonクラスはどこに行くのか分かりません。別のファイルに入れてviews.py
にインポートするか、views.py
ファイル内に実装されているクラスは同じですか?DjangoでPythonクラスを実装する場所は?
例を実装したいのですが、モジュール内の別のファイルでこれを実行するか、またはviews.py
ファイル内の関数を実装するだけですか?
私が書き込むPythonクラスはどこにありますかわかりません。彼らは別のファイル に入り、次にviews.pyにインポートされます。 例クラスアルファベットを実装したいと思います。
それはあなたのimport文が正しい取得の問題だ:あなたのビューで次に
django_proj1/
django_proj1/
myapp/
myclasses.py
views.py
:
#myapp/views.py:
from myapp.myclasses import Alphabet
それとも、あなたはこのようにそれを行うことができます:
django_proj1/
django_proj1/
myclasses.py
myapp/
views.py
あなたの意見で:
#myapp/views.py:
from django_proj1.myclasses import Alphabet
コメントへの応答:
そして、私は成功した私は、HTMLテンプレートに 属性を渡すんどのように、私のクラスをインポートした後?
以下は公式django tutorialからまっすぐです。
myappに/ views.py:
from django.shortcuts import render
from django.http import HttpResponse
from myapp.myclasses import Alphabet #<*** Import your class.
from django.template import RequestContext, loader #<*** Import stuff for the template.
# Create your views here.
def index(request):
alph = Alphabet()
result = alph.change('hello') #Your class produces some result here.
template = loader.get_template("myapp/index.html")
context = RequestContext(request, {
'x' : result #<*** Make a variable named x available in your template.
})
return HttpResponse(template.render(context))
directory structure
は次のようになります。
django_proj1/
django_proj1/
myapp/
myclasses.py
views.py
templates/ <***Create this directory
myapp/ <***Create this directory
index.html <***Create this file
myappに/テンプレート/ myappに/ index.htmlを:
{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
myapp/myclassesPY:
class Alphabet:
def change(self, word):
return word + 'Z'
スタートサーバー:
.../my_django_projects/django_proj1$ python manage.py runserver
URLお使いのブラウザで:
http://localhost:8000/myapp/
あなたが表示されるはずです。
あなたが要求した結果は以下のとおりであった:helloZ
あなたはmyapp/views.py
に次の行をコメントアウトした場合:
:context = RequestContext(request, { #'x' : result #<*** Make a variable named x available in your template. })
はその後、テンプレートは、ブラウザに
index.html
のelse
部分をお送りします申し訳ありませんが、結果を得ることができませんでした。
django_proj1/django_proj1/urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from . import views
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'dj1.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^myapp/', include('myapp.urls')),
)
django_proj1/myappに/ urls.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
そして、私は成功した私のクラスをインポートした後、どのように私は、HTMLテンプレートに属性を渡すのですか?私はrender.py()またはrender_to_responseを使ってviews.pyで作成されたクラスのオブジェクトを返しますか? – Silvestrini
この –
@Silvestriniを行う方法のアイデアのための私の答えをチェックし、私の答えの下で私の応答を参照してください。 – 7stud
Djangoは一日の終わりにちょうどPythonのです。
プロジェクトのどこにでも新しいモジュールを作成し、ビュー、モデル、URLなどにインポートすることができます。一般的なutils(utils.py)の構成方法はよくあります。
あなたは、例えば、いくつかの方法で、あなたの意見にデータを配信することができます
from your_module import some_object
class MyView(TemplateView):
template_name = 'some_template.html'
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['my_data'] = some_object.some_method()
return context
そしてsome_template.html
では:{{ my_data }}
それはアルファベットクラスのスコープに依存します。それがユーティリティクラスであれば、例えばutils.pyファイルを入れることをお勧めします。しかし、主にUI処理を扱うクラスをviews.pyファイルに入れることは、まったく問題ありません。あなた次第。同様のフレームワークへの明確な
、あなたは彼らのインポートパスによって、後でそれらを参照することができます提供(モデルクラスはしかし、一部例外あり)、プロジェクト内の任意の場所Pythonコードを置くことができます。
AppConfig
インポートパス)で指定します。 test.py
とmodels.py
を含むいくつかの魔法がありますが、ほとんどの場合、インポート/参照はかなり明示的です。urls.py
というファイルで参照されますが、通常のPythonのインポートパスとしてインポートされます。この明示例外です:
models.py、test.py、admin.py:彼らは特別な目的を持っており、存在しない可能性があり、提供:
AppConfig
(アプリ名の代わりに)を提供します。テンプレートと静的ファイル:あなたのプロジェクトは、あなたの静的ファイルのために、あなたのテンプレートファイルごとのアプリローダーに依存し、最終的には、各アプリで力まかせ探索があります:彼らの内面static/
とtemplates/
ディレクトリが存在する場合、これらのファイルが検索されます。
それ以外は普通のPythonコードあると、あなたが任意のビューからそれらをインポートする必要がある場合(ビューコードは、通常のPythonのimport機構を輸入しているため)、あなただけの彼らのために、通常のインポート文を実行します。
あなたが望むところでは、それは単なるPythonです。 – davidism
djangoがどこにでも置くことができます。私はしばしば汎用ユーティリティ用のutilsモジュールを持っています。 – fiacre
答えをありがとう!しかし、別のファイルに入れてからインポートすると、HTMLテンプレートの属性をどのように印刷できますか?私は、views.pyの関数を通して要求とテンプレート名を返さなければならないことを知っています。しかし、テンプレートページに属性を渡すことはできません。 – Silvestrini