Как передать контекст в другую функцию представления? (Django)
Мой models.py:
class fields(models.Model):
name = models.CharField(max_length=18)
link = models.TextField()
Ссылка содержит гиперссылку связанного имени.
Мой views.py:
def index(request):
listing = fields.objects.all()
context ={'listing':'listing'}
return render(request,'index.html',context)
Теперь я хочу передать контекст этой функции, включающий только link
, другой функции представления, чтобы другая функция представления была:
def bypass_link(request):
# get the link from above function
# execute some selenium scripts in the link
Простой шаблон, иллюстрирующий это, будет выглядеть следующим образом:
{% for i in listing %}
<tr>
<td data-label="name">{{ i.name }}</td>
<td data-label="Quote"><button><a href ="{ % url 'bypass_link' %} " target="_blank">{{ i.link }}</a></button></td>
<tr>
{% endfor %}
Вы можете передать id
объекта в url, изменив следующее:
шаблон
<td data-label="Quote">
<a href="{% url 'bypass_link' i.id %}" target="_blank">{{ i.link }}</a>
</td>
urls.py
from django.conf.urls import url
url(r'^bypass_link/(?P<pk>\d+)/$', views.bypass_link, name="bypass_link"),
Тогда в вашей функции вам нужно найти тот же экземпляр модели и затем извлечь ссылку.
def bypass_link(request, pk=None):
instance = fields.objects.get(pk=pk)
print(instance.link) # now you have your link
Теперь у вас есть доступ к ссылке через instance.link
В Django вы можете передавать переменную различным представлениям, используя session
В моем примере используется Django 3.2, убедитесь, что требования к сессиям установлены в settings.py
. Но в конфигурации по умолчанию следующий пример должен работать.
def index(request):
listing = fields.objects.all()
# The session object must be json serializable, pay attention
listing_list = [[list.name, list.i] for list in listing]
# set the session variable
request.session['listing_list'] = listing_list
context ={'listing':listing}
return render(request,'index.html',context)
def bypass_link(request):
# get the link from above function
# execute some selenium scripts in the link
# Got the session variable
listing_list = request.session.get('listing_list')
# Do what you want with it here