Python Django:如何根据调用的请求方法更改上下文字典

Python Django:如何根据调用的请求方法更改上下文字典,python,django,Python,Django,我正在将fx\u rates视图中的生成器对象results传递到模板,如下所示: def fx_rates(request): if request.method != 'POST': form = FxForm() results=[] else: form = FxForm(request.POST) if form.is_valid(): scraper = FxScraper()

我正在将
fx\u rates
视图中的生成器对象
results
传递到模板,如下所示:

def fx_rates(request):
    if request.method != 'POST':
        form = FxForm()
        results=[]
    else:
        form = FxForm(request.POST)
        if form.is_valid():
            scraper = FxScraper()
            scraper.from_currencies.append(form.cleaned_data['from_currencies'])
            scraper.dates = form.cleaned_data['dates'].split(" ")
            scraper.to_currency = form.cleaned_data['to_currency']
            results = scraper.results()

    context = {'form':form, 'results':results}
    return render(request, 'map_assistant/fx_rates.html',context)
在该视图的模板中,我使用以下内容显示结果:

<ul>     
  {% for result in results %}
    <li>{{result}}</li>
  {% endfor %}        
</ul>
    {结果中的结果为%}
  • {{result}}
  • {%endfor%}
(下面描述的问题解决后,我可以将其更改为
{{next(results)}}

问题是,我不知道如何防止在使用GET方法调用视图时显示“[]”(请参阅上面的if子句)

我无法删除
results=[]
行,因为使用get调用视图时会出现错误


当方法为GET时,我可能需要以某种方式从
上下文
字典中删除结果?

当方法为GET时,请尝试:

results = ""

这样,结果的值为空

你可以这样做

def fx_rates(request):
    show_div = 'none'
    if request.method != 'POST':
        form = FxForm()
        results=[]
    else:
        show_div = 'block'
        form = FxForm(request.POST)
        if form.is_valid():
            scraper = FxScraper()
            scraper.from_currencies.append(form.cleaned_data['from_currencies'])
            scraper.dates = form.cleaned_data['dates'].split(" ")
            scraper.to_currency = form.cleaned_data['to_currency']
            results = scraper.results()

    context = {'form':form, 'results':results, 'show_div':show_div}
    return render(request, 'map_assistant/fx_rates.html',context)
<div style="display:{{show_div}}">
   <ul>     
  {% for result in results %}
    <li>{{result}}</li>
  {% endfor %}        
</ul>
</div>
您的html将如下所示

def fx_rates(request):
    show_div = 'none'
    if request.method != 'POST':
        form = FxForm()
        results=[]
    else:
        show_div = 'block'
        form = FxForm(request.POST)
        if form.is_valid():
            scraper = FxScraper()
            scraper.from_currencies.append(form.cleaned_data['from_currencies'])
            scraper.dates = form.cleaned_data['dates'].split(" ")
            scraper.to_currency = form.cleaned_data['to_currency']
            results = scraper.results()

    context = {'form':form, 'results':results, 'show_div':show_div}
    return render(request, 'map_assistant/fx_rates.html',context)
<div style="display:{{show_div}}">
   <ul>     
  {% for result in results %}
    <li>{{result}}</li>
  {% endfor %}        
</ul>
</div>

    {结果中的结果为%}
  • {{result}}
  • {%endfor%}

或者干脆检查一下

 {% if result %}
    <ul>     
        {% for result in results %}
    <li>{{result}}</li>
        {% endfor %}        
    </ul>
{% else %}

{% endif %}
{%if结果%}
    {结果中的结果为%}
  • {{result}}
  • {%endfor%}
{%else%} {%endif%}
我无法使用此选项,因为这样,模板中的for循环将无法工作(Django将抛出错误)