Python Django分页:赋值前引用的局部变量

Python Django分页:赋值前引用的局部变量,python,django,pagination,Python,Django,Pagination,我正在为我的Django应用程序进行分页。当我第一次加载应用程序时,分页工作正常,但是当我从下拉菜单中获取每页新的结果数并在单击“下一步”按钮时更新页面时,我会出现以下错误: 在/autotester/update_filters/ 赋值前引用的局部变量“num_results” 以下是相关代码: 在views.py中: def filter_report(request): # More code here with other irrelevant values if r

我正在为我的Django应用程序进行分页。当我第一次加载应用程序时,分页工作正常,但是当我从下拉菜单中获取每页新的结果数并在单击“下一步”按钮时更新页面时,我会出现以下错误:

在/autotester/update_filters/
赋值前引用的局部变量“num_results”

以下是相关代码:

在views.py中:

def filter_report(request):

    # More code here with other irrelevant values

    if request.method == 'POST':
        num_results = request.POST.get('num_results_dropdown')

    tuple_table = tuple(table.items())    # table is a dictionary defined above
    paginator = Paginator(tuple_table, num_results)
    page_num = request.GET.get('page', 1)
    page = paginator.page(page_num)
在table.html中

<form id="filter_form" method="post" action="{% url 'update_filters' %}">
    <!-- My other filter fields -->
    <div class="label">Results</div>
    <select name="num_results_dropdown">
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="50">50</option>
        <option value="100">100</option>
        <option value="200">200</option>
        <option value="300">300</option>
    </select>
</form>
{% if page.has_previous %}
    <a href="?page={{ page.previous_page_number }}">prev</a>
{% endif %}

{{ page.number }} of {{ page.paginator.num_pages }}

{% if page.has_next %}
    <a href="?page={{ page.next_page_number }}">next</a>
{% endif %}

结果
10
20
50
100
200
300
{%如果page.has_previous%}
{%endif%}
{{page.paginator.num_pages}中的{{page.number}}
{%如果page.has_next%}
{%endif%}

我猜,
num\u结果
不会被记住,因为当我试图在
if
语句之外声明
num\u results=total\u testsuites
时,它被重置为
total\u testsuites
,并且由于不再有第2页而崩溃。

不知何故,您的表单是使用
get
请求提交的,这可能是由于一些奇怪的Javascript提交内容。 如果在if语句之前为
num\u results
设置一个值,则该值将保持为该值,这一事实支持了这一点

无论哪种方式,您的代码都依赖于
num_results
,因此更明确地使用它,例如:

def filter_report(request):

    # More code here with other irrelevant values

    num_results = 10 # Set a sane default
    if request.method == 'POST':
        num_results = request.POST.get('num_results_dropdown')

    try:
        num_results = int(num_results) # A posted value will be a string
                                       # if its not a valid int this will throw an exception
        num_results = min(100,num_results) # Don't let it be too big
        num_results = max(1,num_results)   # Don't let it be too small either
    except:
        num_results = 10

    tuple_table = tuple(table.items())    # table is a dictionary defined above
    paginator = Paginator(tuple_table, num_results)

num_results是filter_报告中的一个局部变量,因此当请求不是POST请求时,不会实例化该变量。您是否尝试过将其用作全局变量?在普通Python脚本中,这正是我要做的,可能不是全局变量,但我会将其传递给
filter\u report
函数。然而,Django是不同的,我不完全确定我必须做什么。我现在不在工作,所以我不能尝试它,但我会尝试它明天早上的第一件事,让你知道。然而,我想我已经尝试过类似的东西了。我找不到这方面的任何验证,但我非常确定,无论何时加载/重新加载页面,都会调用整个
views.py
文件,并重置其中以前的值。