2012-02-15 5 views
0

私は現在、この本からDjangoを学びたいと思っています。私はそのほとんどを読んで、自分でWebappを作成しようとしています。私は彼らがどのように相互作用し、どのように一緒にフィットしていないのか本当に分かりません。トラブルシューティングDjangoフォーム/ビュー/テンプレートとそれらがどのように連携するか

# Create your views here. 
from django.shortcuts import render_to_response 
from django import forms 
from datreferral.users.forms import ReferralCode 

def homepageview(request): 
    now = 'your damn referral code' 
    return render_to_response('datreferraltemplate.html', {'now': now}) 

def referral_create(request): 
    if request.method == 'POST': 
     form = ReferralCode(request.POST) 
     if form.is_valid(): 
      new_code = form.save() 
      return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,))) 
    else: 
     form = ReferralCode() 

form.pyファイルがどのように見える

from django.conf.urls.defaults import patterns, include, url 
from users.views import homepageview, submitted, referral_create 

urlpatterns = patterns('', 
(r'^$', homepageview), 
(r'^submitted/$', referral_create), 

views.pyファイルは次のようになります...私のurls.pyファイルは次のように読み込み


...

from django import forms 

class ReferralCode(forms.Form): 
    referralcode = forms.CharField() 

テンプレートはこのように見えます...

{% extends "base.html" %} 

{% block title %} 
Enter your referral codes! 
{% endblock %} 

{% block content %} 
<h1>Enter your code</h1> 

    {% if errors %} 
     <ul> 
      {% for error in errors %} 
      <li>{{ error }}</li> 
      {% endfor %} 
     </ul> 
    {% endif %} 

    <form action="" method="POST"> 
     <p>Subject: <input type="text" name="subject" value="{{ referralcode }}"></p> 
     <input type="submit" value="Submit"> 
    </form> 
{% endblock %} 

うまくいけば十分です。

私は2つのことを探しています。まず、フォームを送信した後にページを表示しようとすると、「if request.method == 'POST':」がトリガーされていないと仮定しているため、どこにも取得できません。明らかにその何かはかなり明白ですが、私は私の人生のバグを見つけることができるモードの一つに入っています。

私が持っている2番目の質問は、基本的に助けを求める嘆願です。どういうわけか、それらの章を何度も読んだ後、私はすべての作品がどうやって相互作用しているかを確かめることはできません。私はテンプレートとurls.pyとviews.pyがやりとりしていることを知っていますが(私は思うが)、データベースとフォームがどのように相互に、またビュー/テンプレートと相互作用するのかを実際に把握することはできません。どのような入力がデータベースに書き込まれても、シンプルなフォームにしたいと言っているように...どのようにそれを行うのですか?私はポストグルを使用しています。

注:フォームとテンプレートは、ここで見つかった修正済みのコードであり、私のニーズを満たすために操作しようとしましたが失敗しました。それが意味をなさない場合は、そのような問題のために、その部分をあまりにも混乱させることはできません。

私はWeb開発に慣れていないため、私を助けてくれる人や、正しい方向に向ける人がいらっしゃる方には本当に感謝しています。

答えて

2
  1. あなたはあなたの中に何も返しません。ビューはでなければなりません。常にが応答を返す必要があります。ほとんどの場合、HttpResponse(サブクラス)クラスのインスタンスが返されます(私はrenderショートカットが本当に好きです)。一番下にデフォルトリターンを設定し、「特別な」レスポンスの早期リターンを追加し、そうでない場合は実行がデフォルトリターンになるようにすることをお勧めします。

  2. モデルを使用してデータを保存する必要があります(tutorialで作業していますか?)。通常excutionモデルは以下の通りです:

    1. あなたのアプリは、リクエストとurls.pyはあなたが閲覧要求がmiddleware
    2. を通過さ
    3. 呼ばれるべきビューが検索されるが呼ばれた取得します何か "している"。私。 (モデルを使用して)データベースからデータを取り出したり、アップロードしたファイルを保存したり、メールなどを送信したりすることができます。返された「何か」はミドルウェアを通過させ、最終的にはこれだけです

ブラウザに渡されたデータのストリームにtranformedされます。これは少し単純化されていますが、すべての重要な部分をカバーしています。

+0

大丈夫です私は本を​​読んでいたとき何がうまくいかなかったのか把握しなければなりません。情報をありがとう! –

0

ここにはかなりの問題があります。

まず、フォームがベースビューでレンダリングされており、homepageviewと同じURLに送信しています。しかし、フォーム処理ロジックは別のビューにあり、呼び出されていません。フォームのactionパラメータを他のURLを指すように変更するか、またはすべてのロジックを同じビューに移動します。

第2に、フォーム処理ビューは応答を返したりテンプレートを表示したりしていません。これはDjangoのエラーです。もしあなたがそのビューを呼び出すことができたなら、例外が表示されます。

第3に、私はDjangoの本全体を読んだことがあり、モデルやデータベースについては何も見ていないとは思えません。ここではモデルを設定していないことはわかりませんが、Djangoがなければデータベースに何も書き込まれません。これを行う必要がありますし、フォームをModelFormサブクラスに変更します。その後、form.save()を呼び出すことができます。

+0

whoa。大丈夫です。正直言って私はそれらを一度読んで、必要に応じて章を読んでいます。私は状態をカバーするカバーを主張する正直ではない。 私はこのサブクラスModelformについて何も読んでいないことを覚えていません。それは本にありますか?私はそれを見なければならないだろうが、私はそれを完全に逃した。
また、私はモデルを設定しましたが、私は彼らがすべてのものとやりとりする方法について過度に混乱していると言いました。だから私はそれらを含んでいませんでした。

関連する問題