簡體   English   中英

Django:將字符串參數傳遞給基於類的視圖不起作用

[英]Django: Passing string parameters to class-based view not working

我嘗試按照此建議將字符串參數傳遞給基於類的視圖,但它似乎不起作用。

網址:

url(r'^chart/(?P<chart_name>\w+)/$',
        ChartView.as_view(chart_name='chart_name'), name="chart_url"),

風景:

class ChartView(View):
    template_name = "chart.html"
    chart_name = None

    def post(self, request, *args, **kwargs):
        form = DatesForm(request.POST)
        context = {
            'form': form
        }
        return render(request, self.template_name, context)

    def get(self, request, *args, **kwargs):
        print("test")
        form = DatesForm()
        # fetch plot data (default values used)
        context = {
            'form': form,
            'chart_name': self.chart_name
        }
        return render(request, self.template_name, context)

應該重定向到視圖的鏈接:

<a href="{% url 'chartboard:chart_url' chart_name='lords' %}">Sometext</a>

(項目的urlconf中給出的命名空間“ chartboard”)。

錯誤:

NoReverseMatch at /chart/lords/
Reverse for 'chart_url' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['chart/(?P<chart_name>\\w+)/$']

出於什么目的,“測試”兩次打印到控制台輸出中(為什么?)

在Ubuntu 14.04.04上使用Django 1.8.11和python 3.4.3

您應該使用kwargs訪問chart_name

# urls.py
url(r'^chart/(?P<chart_name>\w+)/$',
    ChartView.as_view(), name="chart_url"),

# and then in the view

class ChartView(View):
    template_name = "chart.html"

    def get(self, request, *args, **kwargs):
        form = DatesForm()
        context = {
            'form': form,
            'chart_name': kwargs['chart_name'] # here you access the chart_name
        }
        return render(request, self.template_name, context)

您考慮實現此目的的職位是確保變量在模板中可用,並通過在傳遞給模板渲染器的context中對其進行設置來解決該問題。

您在此處面臨的問題是訪問url模式中定義的named group

這是有關當您嘗試訪問URL時django如何處理請求的更多文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM