Я работаю над тем, чтобы разбивать страницы на мое приложение Django. Пагинация работает, когда я сначала загрузить приложение, однако, когда я хватаю новое число результатов на стоимости страницы из выпадающего меню и обновите страницу в любое время я нажимаю на кнопку Далее, я получаю следующее сообщение об ошибке:Django Pagination: локальная переменная, на которую ссылаются перед назначением
UnboundLocalError at /autotester/update_filters/
local variable 'num_results' referenced before assignment
Вот соответствующий код:
в 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 %}
Я предполагаю, что num_results
не помнится, потому что, когда я пытался объявить num_results = total_testsuites
за пределами инструкции if
, он возвращается к total_testsuites
и падает, потому что нет страницы 2.
num_results является локальной переменной в filter_report так, если запрос не запрос POST, переменная не инстанцирован , Вы пытаетесь использовать его как глобальную переменную? –
В обычном сценарии Python, что я и делал, возможно, это не глобальная переменная, но я бы передал ее функции 'filter_report'. Тем не менее, Django отличается, и я не совсем уверен, что мне нужно делать. – steveclark