Как исправить не отображать виджет формы в HTML - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в Джанго.Мне нужно создать виджет формы в качестве входных данных для передачи данных от ввода к сценарию.Проблема в том, что моя форма не отображается, и я понятия не имею, где ошибка.Моя цель - получить данные из ввода, чтобы они были найдены в базе данных API и сохранены в моей базе данных.Благодарю за совет.

views.py

 def data(request):
        url = 'http://www.omdbapi.com/?t={}&apikey=My key is here'

        if request.method == 'POST':
            form = MovieForm(request.POST)
            form.save()

        form = MovieForm()
        movies = Movie.objects.all() #// fetch all objects
        movies_data = []  #//// array for movies and their details
        for movie in movies:
            r = requests.get(url.format(movie)).json() #// gets details from api

            movies_main = {
                'title': movie.title,
                'director': r['Director'],
                'rate': r['imdbRating'],
            }
            movies_data.append(movies_main)
        context = {'movies_data':movies_data}
        return render(request, 'movies/movies.html', context)

forms.py

from django.forms import ModelForm, TextInput
    from .models import Movie

    class MovieForm(ModelForm):
        class Meta:
            model = Movie
            fields = ['title']
            widgets = {'title' : TextInput(attrs={'class' : 'id', 'placeholder' : 'put your id' })}

models.py

from django.db import models

# Create your models here.
class Movie(models.Model):
    title = models.CharField(max_length=50)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = 'movies'

template

    {% load static %}
        <html>
        <head>
        <link rel="stylesheet" href="{%static 'movies/style.css' %}">
        <script type="text/javascript">

        </script>
        </head>

        <body>
            <div class='container'>
                <header>Movies API</header>
                    <form method="POST" action='/index'>  
                        {% csrf_token %}
                        {{ form.title }}
                        <input type='submit' class='sub', value='add'> 
                    </form>
            </div>
        </body>
        </html>

1 Ответ

0 голосов
/ 25 мая 2019

Form не отображается в шаблоне, поскольку не передается в контексте шаблона для рендеринга. Давайте попробуем вот так.

views.py

from django.http import HttpResponseRedirect
def data(request):
    url = 'http://www.omdbapi.com/?t={}&apikey=My key is here'
    if request.method == 'POST':
        form = MovieForm(data=request.POST)
        form.save()
        return HttpResponseRedirect(request.get_full_path()) # During HTTP POST processing, refresh page (Or change with your logic in future).
    else:
        form = MovieForm()
        movies = Movie.objects.all() #// fetch all objects
        movies_data = []  #//// array for movies and their details
        for movie in movies:
            r = requests.get(url.format(movie)).json() #// gets details from api
            movies_main = {
                'title': movie.title,
                'director': r['Director'],
                'rate': r['imdbRating'],
            }
            movies_data.append(movies_main)
    context = {
        'form': form,
        'movies_data': movies_data,
    }
    return render(request, 'movies/movies.html', context)

ваш шаблон

{% load static %}
        <html>
        <head>
        <link rel="stylesheet" href="{%static 'movies/style.css' %}">
        <script type="text/javascript">

        </script>
        </head>

        <body>
            <div class='container'>
                <header>Movies API</header>
                    <form method="POST" action='/index'>  
                        {% csrf_token %}
                        <!-- you also can use {#% form.as_p %#} or {#% form.as_table %#}, but form.title is fine also. -->
                        {{ form.title }}
                        <input type='submit' class='sub', value='add' /> 
                    </form>
            </div>
        </body>
        </html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...