【问题标题】:From a Django 1.6 view I want to go to a non-Django webpage从 Django 1.6 视图我想去一个非 Django 网页
【发布时间】:2014-12-15 23:51:29
【问题描述】:

我有一个显示大量数据的网页。 Thge 页面是使用 Django 1.6、基于类的视图和模板创建的。当用户点击一个显示的数据元素时,另一个视图被调用。然后,该视图生成一个参数列表,然后通过 URL 参数将这些参数列表传递到另一个非基于 Django 的网页(例如,amamzon.com)。有没有办法做到这一点?目前我调用第二个页面,上面有一个按钮,其中包含非 Django 页面的“href”。

【问题讨论】:

  • 我刚刚看到这个帖子。似乎它可能有效,但需要格式化整个网页才能重定向离开它。 link.

标签: django url redirect


【解决方案1】:

使用来自 django.shortcuts 的重定向。 to 按原样传递到重定向响应的位置标头。

from django.shortcuts import redirect

def my_view(request):
    # somehow building my url
    return redirect(to=my_url)

【讨论】:

  • 如果我使用重定向,它会通过我的 urls.py 文件进行调度。但是我的目标 URL 没有在 urls.py 中定义,因为它不是我的项目/应用程序的一部分。
  • 我有一个正在使用的 ListView 类。我在构建结果时覆盖了当前的 get_queryset() 和 get_context_data() 方法。如您所述,我将重定向放在 get_context_data() 中,但它只是返回到默认页面(我假设是因为为类指定了模板名称)。我尝试使用的重定向是这样的:return redirect(to="nnn.com/…)
  • 我也发现这行得通。 我创建了一个模板,其中只有这个来重定向。 View 代码然后选择哪个模板(这个模板或列出结果的模板)。我在 IE 9.0、FF 34 和 Chrome 上对其进行了测试。它有效,但不是很有说服力。
【解决方案2】:

我最终:

  1. 创建了一个仅包含此代码的模板。
头 META HTTP-EQUIV="刷新" CONTENT="0;URL={{ my_url }}?parms=-{{ parm_data }}" /头
  1. 在视图代码中,我添加了一个检查,以查看是否应该在 Django 中使用标准模板,或者访问非 Django 网站。如果我想去外部站点,我只是将类的模板名称更改为新模板并返回。
如果不是 self.stay_internal: self.template_name = 'my_app/redirect.html'
  1. 新模板将参数插入 URL 并重定向到网站。

希望这对将来的其他人有所帮助。或者如果有人有更好的想法,请告诉我。

【讨论】:

  • 在我看来你做错了什么。抱歉,我没有时间实现 ListView 和检查,您能否向我提供您正在做什么的概念,例如以您在应用程序中执行的方式呈现用户的代码?任何如果它有效并让您满意,这是一个很好的解决方案 8 )。
【解决方案3】:

如果您在修改呈现数据的原始视图方面受到限制,那么您可以只为特定视图创建一个 href - 从您要重定向用户的每个数据项中 - 计算新 URL,然后重定向用户。

在你的views.py:

from django.http import HttpResponseRedirect

def redirect_view(request, args):
    new_url = figure_out_url(args)
    return HttpResponseRedirect(new_url)

然后,在您的模板中,对于您希望单击以进入重定向视图的任何项目,请执行

<a href="{% url views.redirect_view args %}">Some data item</a>

显然你需要为这个重定向视图设置你的urlconf,但这似乎应该做你想做的事:

  • 用户点击链接
  • 新视图根据提供的参数确定重定向 URL
  • 用户被重定向到新的 URL

或者(可能是更好的选择),您可以修改在用户单击 URL 的页面上呈现数据的视图,并构建您希望重定向到的 URL(对于每个数据项)并返回它以某种方式在上下文中。例如

{% for item in items %}
    <a href="{{ item.url }}">{{ item }}</a>
{% endfor %}

或者,编写一个模板标签,获取数据并输出适当的 URL 以重定向到,然后将其放入 &lt;a&gt; 标签内。例如

{% for item in items %}
   <a href="{% get_redirect_url item %}">{{ item }}</a>
{% endfor %}

这些方法只是让页面变成一堆链接,而不需要任何类型的特定重定向视图。

另一种方法是使用 JavaScript,但我认为在这些情况下没有必要。

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2012-03-04
    • 2014-08-06
    • 2023-03-09
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多