0

私はDjangoをかなり新しくしており、私はユーザー情報を取り込むページに取り組んでいます。すべての情報が正しい場合は、次のページに進みます。ただし、ユーザーがすべての情報を提供していない場合は、ページが更新されます。私の問題は、ユーザーが記入しなければならないフィールドがかなりあり、人がフィールドを見逃していると、すべてのフィールドを再入力する必要はないということです。ですから、私の回避策はviews.pyで辞書を作成し、それをテンプレートの入力名で埋めることです。しかし、コードを実行すると、辞書の値が存在しないというエラーが表示されます。私は現在、辞書が実際にテンプレート値のどれにもアクセスしていないと考えています。ここでDjangoでは、views.pyのテンプレート値にどうやってアクセスしますか?

は私のテンプレートです:ここでは

<!DOCTYPE html> 
{% extends "Checklist/base.html" %} 
{% block main_content %} 
{% load static %} 
    <html> 
    <body> 

     <form action="{% url 'Checklist:signin_check' %}" method="post"> 
     {% csrf_token %} 
     <ul style="list-style-type:none"> 
     <li> 
      <label for="driver_first_name">Driver First Name:</label> 
      <input type="text" name="driver_first_name" value="" id="driver_first_name"> 
     </li> 
     <li> 
      <label for="driver_last_name">Driver Last Name:</label> 
      <input type="text" name="driver_last_name" value="" id="driver_last_name"> 
     </li> 
     <li> 
      <label for="driver_wwid">Driver WWID:</label> 
      <input type="text" name="driver_WWID" value="" id="driver_WWID" maxlength="8" 
       onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57"> 
     </li> 

     <li> 
      <label for="co_driver_first_name">CO-Driver First Name:</label> 
      <input type="text" name="co_driver_first_name" value="" id="co_driver_first_name"> 
     </li> 
     <li> 
      <label for="co_driver_last_name">CO-Driver Last Name:</label> 
      <input type="text" name="co_driver_last_name" value="" id="co_driver_last_name"> 
     </li> 
     <li> 
      <label for="co_driver_wwid">CO-Driver WWID:</label> 
      <input type="text" name="co_driver_WWID" value="" id="co_driver_WWID" maxlength="8" 
       onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57"> 
     </li> 
     <li> 
     <input type="submit" value="Continue"> 
     </li> 
     </ul> 
     </form> 

    </body> 
    </html> 
{% endblock %} 

はviews.pyです:

def signin_check(request): 
    driver_info_model = Driver() 
    if request.method == "POST": 
     driver_info_form = Driver_Form(request.POST) 
     c = {'driver_first_name':driver_first_name, 'driver_last_name':driver_last_name, 
      'driver_WWID':driver_WWID, 'co_driver_first_name':co_driver_first_name, 
      'co_driver_last_name':co_driver_last_name, 'co_driver_WWID': co_driver_WWID,} 
     if driver_info_form.is_valid(): 
      driver_info_form.save() 
      return render(request, 'Checklist/checklist.html') 
    template = loader.get_template('Checklist/signin.html') 
    return HttpResponse(template.render(c, request)) 

任意のフィードバックをいただければ幸いです。ありがとう!

+0

これにはDjangoフォームを使用する必要があります。 –

答えて

0

しかし、Djangoの作り付けのフォームを後にしている何をする方が簡単かもしれないが、それは私に私の辞書に 値がないというエラーを与えます存在する。今私の ディクショナリが実際にどのテンプレート値にもアクセスしていないと考えています。

あなたのviews.pyだけでは、定義されていない辞書値を割り当てているという例外があると思います。たとえば、'driver_first_name':driver_first_nameでは、Pythonはdriver_first_nameという名前の変数を探していますが、定義していません。 Justinが指摘したように、あなたが探しているデータはrequests.POSTにあります。

一つの解決策、何をすべきかを示し、より冗長ながら:

def signin_check(request): 
    driver_info_model = Driver() 
    if request.method == "POST": 
     driver_info_form = Driver_Form(request.POST) 
     driver_first_name = request.POST.get('driver_first_name', '') 
     driver_last_name = request.POST.get('driver_last_name', '') 
     driver_WWID = request.POST.get('driver_WWID', '') 
     co_driver_first_name = request.POST.get('co_driver_first_name', '') 
     co_driver_last_name = request.POST.get('co_driver_last_name', '') 
     co_driver_WWID = request.POST.get('co_driver_WWID', '') 
     c = {'driver_first_name': driver_first_name, 
      'driver_last_name': driver_last_name, 
      'driver_WWID': driver_WWID, 
      'co_driver_first_name': co_driver_first_name, 
      'co_driver_last_name': co_driver_last_name, 
      'co_driver_WWID': co_driver_WWID, } 
     if driver_info_form.is_valid(): 
      driver_info_form.save() 
      return render(request, 'Checklist/checklist.html') 
    template = loader.get_template('Checklist/signin.html') 
    return HttpResponse(template.render(c, request)) 

私の問題は、ユーザーが 記入し、人のミスならばなければならない分野のかなりがあるということです任意のフィールド、私は彼らに にしたくない再入力する必要があります。

2番目の懸案事項に対処するには、HTMLテンプレートを処理する必要があります。入力フィールドの値は""なので、コンテキストを通る値はどの値にも到達しません。幸いにも、あなたは正しい道を歩いていて、あなたはとても近くにいるので、あなたがする必要があることは、それらの値を埋めることだけです。たとえば、次の{{ driver_first_name }}はコンテキストに渡されていますdriver_first_nameを参照していることを

<li> 
    <label for="driver_first_name">Driver First Name:</label> 
    <input type="text" name="driver_first_name" value="{{ driver_first_name }}" id="driver_first_name"> 
</li> 

注意。

+0

ありがとう!しかし、 "driver_first_name"に値を追加しても私の原因は解決しませんでした。それは、htmlテンプレートのテキスト領域に「driver_first_name」を追加するだけでした。ただし、ページをリロードすると、テキストはデフォルトにリセットされます。 –

+0

@ ZarifAkhtabどうぞ宜しくお願い致します。明確にするために、どのテンプレートがテキストフィールドなどを含むテンプレートですか?私はあなたの意見で、レンダリング可能な2つのテンプレートがあることに気づきました。 –

0

イム私は自分自身をDjangoのためにかなり新しいんだけど、私が以前にやったから、あなたはこのように、渡された要求からPOSTデータを得ることができるよう、100%確実ではない:

request.POST['driver_first_name'] 

データが存在しないか、データが指定されたフィールド、または任意デフォルトで存在しない場合Noneを返す

request.POST.get('driver_first_name', 'optionaldefaultvalue') 

からの場合は、エラーを発生させています。

また、私は、コードを実行するために行くときに、

関連する問題