如何在Django中动态打开新页面

时间:2013-10-26 09:19:35

标签: python django

我已经制作了一个Django应用程序来显示聚集的新闻文章列表。我希望在第一页只显示三篇文章,如果用户想要全部显示,他可以点击“查看真实报道”链接并查看文章的整体列表(作为GoogleNews功能)。在主页面中,我有一个名为 lista 的变量中的文章列表。我想只发布主页面中的前三个元素,我想在新页面中传输文章列表,让我们称之为 主题 。我在views.py文件中添加了 主题 函数:

def theme(request,argument):
    lista=argument
    return render(request,'theme.html', locals())

我调用主题函数的 main.html 代码如下:

<a href="{% url "mysite.views.theme" argument=lista %} target="_blank">

或者我尝试:

<a href="{% url "mysite.views.theme" lista %} target="_blank">

urls.py 代码为:

urlpatterns = patterns('',
    ('^main/$', main),
    ('^all/$', tegjitha),
    ('^(sport)/$', gen),
    ('^(teknologji)/$', gen),
    ('^(showbiz)/$', gen),
    ('^(bota)/$', gen),
    ('^(ekonomi)/$', gen),
    ('^(kulture)/$', gen),
    ('^(theme)/$', theme),

它给了我:NoReverseMatch at / main / error。

2 个答案:

答案 0 :(得分:2)

您需要意识到您尝试采用的方法不起作用。 url模板标记所做的就是生成一个简单的字符串 - 特定资源的URL。所以标签的结果可能是一个字符串,如“/ post”,“/ post / 24”等。就是这样。除了生成URL字符串之外,该函数不执行任何操作,并且在简单的Web URL中没有复杂python对象列表的位置。

您还需要意识到,在最基本的层面上,网络是无国籍的。您不能只在请求之间传递python对象,因为每个请求都是完全独立的。您可以使用sessions模拟保持请求之间的状态,但我不认为这是在这种特定情况下的正确工具。

您应该做的是为每个列表设置一个唯一标识符,并在URL中传递标识符(与在URL中传递整个列表相反)。然后,您将在视图中使用标识符,再次检索列表,并显示结果。

答案 1 :(得分:0)

您需要将urls.py作为绝对字符串,就像模板中的url标记一样。所以主要看起来像这样:

('^main/$', 'mysite.views.main'),

您还可以在顶部定义模式的路径:

urlpatterns = patterns('mysite.views',
    ('^main/$', 'main'),
    … etc

但请注意,您仍然需要将其作为字符串

引用