2016-04-04 7 views
0

Ich fange an zu lernen Django und ich definierte Klassen basierte Ansichten, erstellte ich eine Ansicht, die Sie manuell eingeben Bücher Details wie: Titel, Autor, ... Ich auch Suchfeld hinzugefügt in der gleichen Ansicht, die automatisch Buchdetails durch API- und Web-Scraping finden sollte. Die Ergebnisse sollten in einer neuen Ansicht angezeigt werden, einer neuen URL, die sich basierend auf Benutzereingaben ändert, mit mehreren Ergebnissen, die der Benutzer am besten auswählen würde.Wie bekomme ich ein Keyword von HTML-Vorlage - Django

Problem ist, dass ich noch nicht weiß, wie Benutzer Eingaben von definierten Suchfeld erhalten und es an eine andere Ansicht (andere Klasse) übergeben, die es manipulieren wird.

Suchfeld in Vorlage:

<div class="col-sm-offset-2 col-sm-10"> 
    <form id="custom-search-input" action="{% url 'find_book' %}" method="get" accept-charset="utf-8"> 
     <div class="input-group col-sm-10" > 
     <input type="text" class="form-control input-lg" placeholder="Find books" /> 
     <span class="input-group-btn"> 
      <button class="btn btn-info btn-lg" type="submit"> 
      <i class="glyphicon glyphicon-search"></i> 
      <i class="fa fa-search"></i> 
      </button> 
     </span> 
     </div> 
     </form> 
    </div> 

definierte Klasse, wo Benutzereingaben können:

class BookCreateView (CreateView, SuccessMessageMixin,): 
    model = Appointment 
    fields = ['title', 'author', 'time'] 
    success_message = 'Appointment successfully created.' 

    def get_context(self, **kwargs): 
     context = super(BookCreateView, self).get_context_data(**kwargs) 

Klasse, die ich Ergebnisse wollen zeigen (keine Ahnung, wie):

class BookFindView (View): 
    response_template = 'book_find.html' 

Jeder Tipp oder Tutorial oder Dokumentation empfohlen würde sehr geschätzt werden.

+0

Ist dies eine Frage, wie Django Views Benutzereingaben akzeptieren können? Mit einfacheren Ansichten sollte [diese Lösung] (http://stackoverflow.com/a/21207496/1842146) die Aufgabe erledigen (und ich denke auch, dass ich für diese einfacheren Ansichten eine 'def' anstelle einer' Klasse' verwende BookFindView ist wahrscheinlich eine bessere Option). –

Antwort

1

Jede Ansicht kann sowohl "Get" - als auch "Post" -Handhabung implementieren; So können Sie etwas wie

haben
class BookCreateView(views.View): 
    # subclass the basic form and add an hidden input named search 
    form = your_custom_search_form 
    # subclass the create model form 
    confirmation_form = your_custom_create_model_form 

def get(request): 
    # show the empty search page 
    # in your template use the form to implement search 

def post(request): 
    # handle the book search; there is a data in the payload named search 
    # you now have a payload to use; here you make a database query 
    # and return the similar books; every book is printed in the page 
    # using the your_custom_create_model_form that you can prepopulate 

    # handle the confirmation of the book otherwise; the post 
    # payload will contain the book information 
Verwandte Themen