在呈现新页面之前,如何将参数从URL传递到视图?

时间:2018-12-24 07:44:49

标签: python django

我正在创建一个股票投资组合应用程序。用户有一个股票列表,每个股票都有一个看起来像“ http://127.0.0.1:8000/search/symbol=TSLA”的链接。我想做的是将股票代码“ TSLA”传递到我的一个视图中,然后只需在下一页上打印该字符串即可(目前)。

到目前为止,我所做的(没有在下面的代码中包括它)只是在我的SearchPageView中有一个名为get_symbol的方法,我试图从那里和我的URL中获取url。 search.html模板,我尝试通过{{ view.get_symbol }}访问它。但这什么也没显示。

我的设置:

views.py:

class SearchPageView(TemplateView):
    template_name = 'search.html'

urls.py:

from django.urls import path, re_path
from .views import SearchPageView

urlpatterns = [
    path('search/<string>', SearchPageView.as_view(), name='search_stock'),
]

search.html:

{% extends 'base.html' %}

{% block content %}
{% endblock content %}

我知道上面没有什么,我要问的是如何将字符串“ TSLA”传递到我的视图,然后传递给“ search.html”,然后我可以做我需要做的事情。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

以此更改您的urls.py

path('search/<symbol>', SearchPageView.as_view(), name='search_stock'),

views.py

from django.shortcuts import get_object_or_404
from django.views.generic import ListView


class SearchPageView(ListView):

        template_name = 'your_template.html'

        def get_queryset(self):
            self.publisher = get_object_or_404(YOUR_MODEL_NAME, name=self.kwargs['symbol'])
            return YOUR_MODEL_NAME.objects.filter(symbol=self.symbol)

我认为您的模型字段名称为symbol

答案 1 :(得分:0)

您可以尝试这样:

from django.shortcuts import render
def page_view(request):
    # recheck how to get data you want pass in html from this view
    return render(request, 'search.html', {
            'symbol': request.DATA.get('symbol'),
    })

,并在url中更改为此:

urlpatterns = [
    path('search/<string>', page_view, name='search_stock'),
]

,在search.html中,您将拥有{{ symbol }}中的def page_view变量