如何将上下文传递给不同的视图函数?(Django)
How to pass context to a different view function?(Django)
我的models.py:
class fields(models.Model):
name = models.CharField(max_length=18)
link = models.TextField()
link包含相关名称的hyperlink。
我的views.py:
def index(request):
listing = fields.objects.all()
context ={'listing':'listing'}
return render(request,'index.html',context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('',index,name="index"),
]
模板:
{% for i in listing %}
<tr>
<td data-label="name">{{ i.name }}</td>
<td data-label="Quote"><button><a href ="{{ i.link}} " target="_blank">{{ i.link }}</a></button></td>
<tr>
{% endfor %}
这会重定向到模板中显示的 hyperlink,但我想在它重定向到此 link.
后进行一些自动化操作
现在,我想将仅包含 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"),
然后在你的函数中你需要找到相同的模型实例然后提取 link.
def bypass_link(request, pk=None):
instance = fields.objects.get(pk=pk)
print(instance.link) # now you have your link
现在您可以通过 instance.link
访问 link
您可以使用 session
将变量传递给 Django 中的不同视图
我的示例使用的是 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
我的models.py:
class fields(models.Model):
name = models.CharField(max_length=18)
link = models.TextField()
link包含相关名称的hyperlink。
我的views.py:
def index(request):
listing = fields.objects.all()
context ={'listing':'listing'}
return render(request,'index.html',context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('',index,name="index"),
]
模板:
{% for i in listing %}
<tr>
<td data-label="name">{{ i.name }}</td>
<td data-label="Quote"><button><a href ="{{ i.link}} " target="_blank">{{ i.link }}</a></button></td>
<tr>
{% endfor %}
这会重定向到模板中显示的 hyperlink,但我想在它重定向到此 link.
后进行一些自动化操作现在,我想将仅包含 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"),
然后在你的函数中你需要找到相同的模型实例然后提取 link.
def bypass_link(request, pk=None):
instance = fields.objects.get(pk=pk)
print(instance.link) # now you have your link
现在您可以通过 instance.link
您可以使用 session
将变量传递给 Django 中的不同视图我的示例使用的是 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