2016-04-07 28 views
0

String parametrelerini sınıf temelli bir görünüme geçirmek için this suggestion'u denedim ancak işe yaramadı.Django: String parametrelerini çalışmayan sınıf tabanlı görünüme geçirme

url:

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

görünüm:

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) 

görünümüne yönlendirme olması gerekiyordu linki:

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

(ad verilen 'chartboard' projenin urlconf'u.

hatası: onun değerinde, "test" konsol çıkışına iki kez basılmış Nelerin için

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

(neden?) Ubuntu 14.04 üzerinde django 1.8.11 ve python 3.4.3 Kullanılması

.04

+1

Geri tepme, hataya neden olan satırı gösteriyor mu? Gönderdiğiniz bağlantı olduğunu sanmıyorum, çünkü 'chart_name =' lords 'hata mesajıyla eşleşmiyor. – Alasdair

+0

@Alasdair evet haklısın! Bu url'yi şablonun başka bir yerinde parametreler olmadan kullanıyorum ve dolayısıyla belirli bir hata – pkaramol

+0

Sorunu çözmeyi başardınız mı? Değilse, başarısız olan satırı gönderin. – Alasdair

cevap

0

Sen chart_namekwargs kullanarak erişebilir olmalıdır:

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

Bunu uygulamak için düşündüğünüz kayıt, bir değişkenin şablonlarda mevcut olduğundan emin olmak içindir ve bu, şablon oluşturma işlemine iletilen context içinde ayarlanarak halledilir.

Burada karşılaştığınız sorun, URL deseninde tanımlanan named group erişimini kullanmaktır.

Bir URL'ye erişmeye çalıştığınızda django'nun bir isteği nasıl işlediği hakkında daha fazla documentation.