【问题标题】:Search and Display in same view在同一视图中搜索和显示
【发布时间】:2018-08-21 05:34:49
【问题描述】:

我正在学习 Django,我想知道是否有更好的方法来做到这一点。基本上我正在尝试从 IMDbPy API 获取电影并显示电影信息。截至目前,我正在使用一个视图来获取信息并显示它(使用两个不同的模板)。这是正确的方法吗?或者我应该把它分成两个不同的视图?如果是这样,我该怎么做?

观看次数

def get_movie_name_view(request):
form = GetMovieName(request.POST or None)
if form.is_valid():
    ia = IMDb()
    movies = ia.get_movie(form.cleaned_data['movie_title'])
    context = {'title': movies['title'],
               'directors': movies['directors'],
               'runtime': movies['runtime'],
               'year': movies['year'],
               'genre': movies['genres'],
               'form': form
               }
    return render(request, 'show_movie_info.html',context)
context = {
    'form': form
}
return render(request, 'get_movie_name.html', context)

型号

class Movie(models.Model):
  title = models.CharField(max_length=250)
  directors = models.CharField(max_length=300)
  runtime = models.IntegerField()
  year = models.DateField()
  genre = models.CharField(max_length=100)

表格

class GetMovieName(forms.Form):
movie_title = forms.CharField(label='Movie Title', max_length=100)

获取电影模板

{%  extends 'base.html' %}

{% block content %}
    <form method="POST"> {% csrf_token %}
        {{form.as_p}}
    <input type="submit", value="Submit" />
    </form>
{%  endblock %}

显示影片模板

{%  extends 'base.html' %}

{% block content %}
    <p> Title: {{ title }} </p>
    <p> Duration: {{ runtime }} minutes </p>
    <p> Director: {{ directors }} </p>
    <p> Year: {{ year }} </p>
    <p> Genre: {{ genre }}</p>


{%  endblock %}

【问题讨论】:

  • 您是故意不保存表单吗?
  • 是的,我不想保存表单(如果可能的话)。一开始只显示结果。稍后,如果用户愿意,他或她可以将电影信息保存到他们的帐户中。但起初我的目标只是显示信息
  • 好的,明白了。

标签: python django imdbpy


【解决方案1】:

我做了一些改变。

def get_movie_name_view(request):
    form = GetMovieName(request.POST or None)
    # ensure the request is a post
    if request.method == 'POST':
        if form.is_valid():
            ia = IMDb()
            movies = ia.get_movie(form.cleaned_data['movie_title'])
            context = {'title': movies['title'],
                       'directors': movies['directors'],
                       'runtime': movies['runtime'],
                       'year': movies['year'],
                       'genre': movies['genres'],
                       'form': form
                       }
            return render(request, 'show_movie_info.html',context)
    # ensure request is a GET
    if request.method == 'GET':
        context = { 'form': form }
        return render(request, 'get_movie_name.html', context)

【讨论】:

  • 这是您问题的答案吗?
猜你喜欢
  • 2015-07-13
  • 2021-09-24
  • 1970-01-01
  • 2019-11-03
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多