如何在Python同时循环浏览两件事并在d​​jango模板中使用它

时间:2016-01-18 18:58:49

标签: python django

我尝试遍历列表并在视图中返回两个内容并将其显示在我的模板中。我正在抓取数据,我试图获取文本和href,以便我可以在我的模板中使用它们。我是django和python的新手。首先,我尝试在views.py中执行此操作:

 for link in soup.find_all('a'):
    text = link.text
    href = link.get

#links = soup.find_all("a")

ella = "ella"
context = {
    #"links": links,
    "ella": ella,
    "text": text,
    "href": href

这在我的template.html中

{% for link in links %}
    {{ text }}
    {{ href }}
{% endfor %}

我也试过这个

{% for link in links %}
    {{ link.text }}
    {{ link.href }}
{% endfor %}

它没有工作,在我看来,我收到了以下错误

local variable might be referenced before assignment

所以我添加了全局

 global text, href

for link in soup.find_all('a'):
    text = link.text
    href = link.get

#links = soup.find_all("a")

ella = "ella"
context = {
    #"links": links,
    "ella": ella,
    "text": text,
    "href": href
}

但它仍然没有奏效。什么是实现我想要的结果的正确语法。欢迎任何帮助或指导。

2 个答案:

答案 0 :(得分:0)

在代码中列出tuples

 links = []

 for link in soup.find_all('a'):
    links.append((link.text, link.get))

context = {'links': links}

然后在模板中使用它们:

{% for text, href in links %}
    {{ text }}
    {{ href }}
{% endfor %}

答案 1 :(得分:-1)

您必须在views.py这样定义您的视图(它是一个函数)(template.html必须位于templates目录中):

from django.shortcuts import render

def myview(request):
    links = soup.find_all('a')
    return render(request, 'template.html', dict(links=links))

您的urls.py必须包含此视图的绑定:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.myview, name='index'),
]

render()接收上下文字典作为第三个位置参数。

https://docs.djangoproject.com/en/1.9/topics/http/shortcuts/#django.shortcuts.render