2013-02-12 11 views
8

मैं django के लिए काफी नया हूं और कुछ आसान करने के लिए संघर्ष कर रहा हूं। मैं निम्नलिखित मॉडल के लिए एक ModelForm है:django: एक ही पृष्ठ में इनपुट लेना और आउटपुट दिखाना

class Queries(models.Model): 
    user_id=models.CharField(max_length=200) 
    query=models.CharField(max_length=200) 

और मैं उपयोगकर्ता कि निम्न कार्य करने में मदद मिलेगी एक सरल रूप दिखा रहा हूँ:

  • उपयोगकर्ता एक सवाल
  • पूछना होगा प्रश्न संसाधित किया जाएगा (प्रश्न के आधार पर एक डेटाबेस क्वेरी उत्पन्न की जाएगी)

  • फिर क्वेरी परिणाम shou एलडी उसी पृष्ठ में फॉर्म के नीचे दिखाया जा सकता है।

इस तरह मेरी views.py की तरह दिखता है:

from django.http import HttpResponse 
from django.shortcuts import get_object_or_404, render 
from basicapp.models import QueryForm 

def index(request): 
    form=MyForm() 
    real_form=form.getForm(request) 
    response=form.response 
    return render(request,'basicapp/index.html',{ 
     'form': real_form, 
     'response':response, 
    }) 
class MyForm: 
    response='' 
    def getForm(self,request): 
     form = QueryForm(request.POST) 
     if form.is_valid(): 
      response=form.cleaned_data['query'] 
      form.save() 
     return form 

अब मैं, सरल सामान कोशिश कर रहा हूँ मैं फार्म की क्वेरी फ़ील्ड में मान ले रहा हूँ और करने के लिए इसे भेजने की कोशिश कर वापस लिए पृष्ठ; अब तक मैं असफल रहा हूं। यह index.html है:

<form action=" " method="post">{% csrf_token %} 
{{ form }} 
<p>{{response}}</p> 
<input type="submit" value="Submit" /> 
</form> 

मैं यह कर सकता है, तो मुझे लगता है कि क्वेरी सामान अभ्यस्त हो कि tough.The प्रपत्र ठीक काम कर रहा है, datas डेटाबेस में बचाया जा रहा है। प्रपत्र जमा करने के बाद index.html के अंदर views.py से केवल response स्ट्रिंग को पुनर्प्राप्त नहीं किया जा सका। क्या आप कृपया मदद कर सकते हैं?

संपादित करें: हॉफ के उत्तर के आधार पर index.html में निम्नलिखित की कोशिश की:

<form id="myForm" action=" " method="get">{% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 
<div id="response"> 
</div> 
<script language="JavaScript"> 
    $(document).ready(function() { 
     $("#myForm").submit(function() { // catch the form's submit event 
      $.ajax({ // create an AJAX call... 
       data: $(this).serialize(), // get the form data 
       type: $(this).attr('GET'), 
       success: function(response) { // on success.. 
        $("#response").html(response); // update the DIV 
       } 
      }); 
      return false; 
     }); 
    }); 
</script> 

फिर भी प्रयास विफल :(

+2

पोस्ट के बजाय जीईटी का प्रयोग करें। मुझे लगता है कि आप एक खोज कर रहे हैं – catherine

+0

धन्यवाद :) संपादित। –

उत्तर

9

views.py

def index(request): 
    questions=None 
    if request.GET.get('search'): 
     search = request.GET.get('search') 
     questions = Queries.objects.filter(query__icontains=search) 

     name = request.GET.get('name') 
     query = Queries.object.create(query=search, user_id=name) 
     query.save() 

    return render(request, 'basicapp/index.html',{ 
     'questions': questions, 
    }) 

एचटीएमएल

<form method="GET"> 
    Question: <input type="text" name="search"><br/> 
    Name: <input type="text" name="name"><br/> 
    <input type="submit" value="Submit" /> 
</form><br/><br/> 


{% for question in questions %} 
<p>{{question}}</p> 
{% endfor %} 
+0

क्या आप इसे थोड़ा सा समझा सकते हैं:/उलझन में ... –

+0

संपूर्ण कोड: पी इन सभी को view.py में होना चाहिए या HTML भाग index.html में होना चाहिए? यदि वह मेरा मॉडलफॉर्म उपयोग किया जा रहा है? –

+0

जब उपयोगकर्ता प्रश्न सबमिट करता है तो "अगर" स्थिति ट्रिगर हो जाएगी और उस प्रश्न की खोज शुरू हो जाएगी। आउटपुट: यह आपके द्वारा सबमिट किए गए प्रश्नों की सूची दिखाएगा। – catherine

3

आपको क्या करना होगा एक अतुल्यकालिक पोस्ट (ajax) है, जो jQuery के साथ आसान है, को देखने के एक पूर्ण समाधान के लिए इस उत्तर: How to POST a django form with AJAX & jQuery

+0

कृपया संपादित प्रश्न की जांच करें। मैं अभी भी भाग्य से बाहर हूं। :( –

1

हॉफ के जवाब के बाद ...

ajax कॉल करने के लिए URL विशेषता जोड़ें:

$(document).ready(function() { 
    $("#myForm").submit(function() { // catch the form's submit event 
     $.ajax({ // create an AJAX call... 
      data: $(this).serialize(), // get the form data 
      type: $(this).attr('GET'), 
      url: '/URL-to-ajax-view/', 
      success: function(response) { // on success.. 
       $("#response").html(response); // update the DIV 
      } 
     }); 
     return false; 
    }); 
}); 

views.py में कुछ ajax हैंडलर:

# /URL-to-ajax-view/ 
def ajax_get_response(request): 
    if request.method == "GET" and request.is_ajax: 
     form = QueryForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return HttpResponse(form.response) 
    raise Http404 

ऐसा कुछ करने का प्रयास किया?

+0

अभी आज़माएं। :) आशाजनक लगता है ... –

+0

मुझे बताएं कि यह कैसे जाता है :) – Ogre

1
<input type="text" name="query" /> 
<input type="submit" name="submit" value="Submit" /> 

आप यह जांच सकते हैं कि फ़ॉर्म सबमिट किया गया था या नहीं (i।ई अगर यह एक पोस्ट अनुरोध या नहीं) है:

if 'submit' in request.POST: #you could use 'query' instead of 'submit' too 
    # do post related task 
    # add context variables to render post output 
    # add another context variable to indicate if it's a post 
    # Example: 
    context.update({'post_output': request.POST.get('query','')}) 
... 
return render(request, 'index.html', context) 
फिर टेम्पलेट में

, तो देखें कि संदर्भ चर post_output मौजूद है, अगर यह उत्पादन दिखाता है:

{% if post_output %} 
    Output: {{ post_output }} 
{% endif %} 


संक्षेप में, तर्क है:

  1. जांचें कि क्या प्रासंगिक request.POST dict कुंजी मौजूद है या नहीं।
  2. यदि कुंजी मौजूद है, तो यह एक पोस्ट अनुरोध है; पोस्ट संबंधित संदर्भ चर जोड़ें और पोस्ट संबंधित कार्यों को करें।
  3. जांचें कि क्या कोई पोस्ट संबंधित संदर्भ चर टेम्पलेट में उपलब्ध है और यदि ऐसा होता है, तो पोस्ट संबंधित आउटपुट दिखाएं।

आप उत्पादन जब पेज बस एक पोस्ट के बाद ताज़ा किया जाता है को दिखाने के लिए नहीं करना चाहते हैं, टेम्पलेट के लिए request वस्तु गुजरती हैं और इस तरह एक जांच कार्य करें: आपको चाहिए

{% if request.POST.submit and post_output %} 
संबंधित मुद्दे