【问题标题】:Django - redirect to view after clicking on favorite linkDjango - 单击最喜欢的链接后重定向到查看
【发布时间】:2020-06-05 23:56:36
【问题描述】:

在我的应用中,我想创建最喜欢的系统:

  • 用户输入网址
  • 计算一些数据
  • 然后用户可以将此链接添加到收藏夹

点击添加后,用户被重定向到返回他所有收藏链接的其他端点。在这一点上,我想添加允许用户单击他最喜欢的一个,返回到其他视图并计算一些数据的可能性。

我的views.py

def home(request):
    """this function returns form which allows user to input link"""
    if request.method =='POST'
        url = request.POST['url']
        request.session['url'] = url
        return redirect('bokeh')
    return render(request,'base.html')

在此之后,bokeh.html 被返回并有一些类似图表的数据

def bokeh(request):
    url = request.session.get('url')
    cl = CalculationLogic()
    return cl.get_data_from_url(request,url)

在这个视图中,有一个按钮可以添加到收藏夹。点击后,方法被调用:

def favorites(request):
    url = request.session.get('url')
    repo = Repository(url=url,user=request.user)
    repo.save()
    repo.repositorys.add(request.user) #adding value to ManyToMany field
    user = User.objects.get(username=request.user.username)
    repos = user.users.all() #return all url which current user has in favorites
    return render(request,'favorites.html',{'repos':repos})

在我的 favorites.html

{% extends 'bokeh.html' %}

{% block content %}

<h1>Favorites repositorys for {{ user }}</h1>
{% for r in repos %}
    <br><a href="{% url 'bokeh' %}">{{ r }}</a>
{% endfor %}

{% endblock %}

所以,此时我会显示所有用户最喜欢的存储库。单击其中一个后,我想返回 bokeh view 并根据单击的 url 返回不同的数据。有没有简单的方法来解决这个问题?

【问题讨论】:

    标签: python django view parameter-passing


    【解决方案1】:

    您可能希望将 repo id 作为 GET 参数传递,例如:

    {% for r in repos %}
        <br><a href="{% url 'bokeh' %}?repo_id={{r.id}}">{{ r }}</a>
    {% endfor %}
    

    然后在views.py中,类似:

    def bokeh(request):
        repo = request.GET.get('repo_id')
        ...
    

    【讨论】:

    • 澄清一下,我的散景网址看起来: url(r'^bokeh/$',views.bokeh,name='bokeh') 要从此循环执行重定向,是否应该修改或添加另一个?
    • 不需要,它应该按原样工作。如果您希望您的 URL 显示为:foo.com/bokeh/?repo_id=1,则无需更改任何内容。但是,如果您希望您的 URL 显示为 foo.com/bokeh/1,并将 repo ID 作为 URL 本身的一部分 - 而不是作为 GET 参数 - 那么您需要更改您的 urls.py。这里有一些更详细的讨论(stackoverflow.com/questions/150505/…
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多