Я смущен тем, как настроить/называть мой URL-адрес, чтобы передать словарь данных из моего шаблона в мое представление. Я получаю сообщение об ошибке «NoReverseMatch at/categories/academy /» Как я могу передать data_dict
, который является словарем, на мой взгляд?Передать данные словаря в представление Django
template.html
<a href="{% url 'polls:request_access' data_dict %}" class="btn btn-green btn-sm"><i class="fa fa-plus"></i> Join Group</a>
urls.py
# the category_slug in this case is "academy", see the error I mentioned above
url(r'^categories/(?P<category_slug>[-\w]+)/request_access/$', 'request_access', name='request_access')
views.py
def request_access(request, data):
print("DJANGO VIEW- THIS IS NOT PRINTING")
mydata = request.GET.get('data_dict') # will this work?
# do other stuff
return render(request, 'polls/categories/group_access_requested.html',
{'data': request})
Откуда взялся этот data_dict? В большинстве случаев имеет смысл хранить данные в сеансе пользователя. Если вы поместите его в URL-адрес, вам нужно каким-то образом перевести словарь в параметры URL-адреса. Вы можете рассортировать/json-дамп словаря и хранить его в базе данных, а затем использовать хэш или uuid для ввода URL-адреса. 'HTTP: // пример.com/categories/foo/request_access/AD5dsf431234s52/' ' AD5dsf431234s52' затем используется как pk или уникальный пул, чтобы перестроить словарь из хранилища в вашей базе данных или что-то вроде redis. –
Это похоже на ссылки, которые вы получите, когда вы нажмете «Я забыл пароль» на многих веб-страницах. URL-адрес содержит только уникальную и непознаваемую строку, связанную с некоторым значением, хранящимся на сервере. Сессионные куки в django также используют аналогичную ключевую схему. Он не хранится в URL-адресе, а в файле cookie на стороне клиента. –
Большое спасибо @ HåkenLid Это отличное объяснение. Я попробую этот маршрут один раз/если мой текущий подход не сработает (попытка кодирования параметров URL) – steph