2016-04-07 7 views
0

Ich habe versucht, folgende this suggestion Zeichenfolge-Parameter an eine klassenbasierte Ansicht übergeben, aber es scheint nicht zu funktionieren.Django: Übergeben von String-Parametern an die klassenbasierte Ansicht funktioniert nicht

der url:

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

die Ansicht:

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) 

der Link, der zu der Ansicht sein Umleitung soll:

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

(Namespace 'chartboard' gegeben in die urlconf des Projekts).

der Fehler:

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

Für das, was ihren Wert "Test" zweimal an die Konsole Ausgabe gedruckt wird (warum?)

Mit django 1.8.11 und Python 3.4.3 auf Ubuntu 14.04 .04

+1

Zeigt das Traceback die Zeile an, die den Fehler verursacht? Ich glaube nicht, dass es sich um den Link handelt, den Sie gepostet haben, weil der 'chart_name = 'lords'' nicht mit der Fehlermeldung übereinstimmt. – Alasdair

+0

@Alasdair yep du bist richtig! Ich verwende diese URL ohne Parameter an einer anderen Stelle der Vorlage und daher den spezifischen Fehler – pkaramol

+0

Haben Sie es geschafft, das Problem zu beheben? Wenn nicht, posten Sie die fehlerhafte Zeile. – Alasdair

Antwort

0

sollten Sie Zugriff auf die chart_namekwargs mit:

# 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) 

Der Beitrag, den Sie für die Implementierung in Betracht gezogen haben, stellt sicher, dass eine Variable in Vorlagen verfügbar ist und dass dies durch Einrichten in context erledigt wird, das an das Vorlagen-Rendering übergeben wird.

Das Problem, mit dem Sie konfrontiert werden, besteht darin, auf eine named group zuzugreifen, die im URL-Muster definiert ist.

Hier ist mehr documentation auf, wie Django eine Anfrage verarbeitet, wenn Sie versuchen, auf eine URL zuzugreifen.