Получить слаг в DetailView

urls.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name="index"),
    url(r'^(?P<slug>[-\w]+)/$', views.DetailView.as_view(), name="detail"),
]

просмотры.py

class DetailView(generic.DetailView):
    model = Company
    template_name = 'news/detail.html'

    def get_context_data(self, **kwargs):
         # Add in a QuerySet of all the books
         context = super(DetailView, self).get_context_data(**kwargs)
         response = requests.get('https://api.intrinio.com/news?identifier=SHOP', auth=requests.auth.HTTPBasicAuth(
        'xxxx',
        'xxxx'))
         context['articleList'] = response.json()
         return context

URL для посещения: http://localhost:8000/news/SHOP/

Итак, что должно сделать мое приложение, так это, в зависимости от URL-адреса, получить слаг и использовать API Intrinio для получения ответа.

Вся ответная часть работает, но в настоящее время это всегда одна и та же компания (?identifier=SHOP). Я хочу сделать его динамическим в зависимости от URL-адреса.

Но я очень новичок в Django и не знаю, как мне передать слаг в DetailView. Я надеюсь, что вы можете помочь.


person Sharpless512    schedule 19.05.2017    source источник


Ответы (1)


Вы можете получить доступ к слагу в self.kwargs.

def get_context_data(self, **kwargs):
     # Add in a QuerySet of all the books
     context = super(DetailView, self).get_context_data(**kwargs)
     slug = self.kwargs['slug']
     response = requests.get('https://api.intrinio.com/news?identifier=%s' % slug,
     ...
     )
person Alasdair    schedule 19.05.2017
comment
Отлично, что работает! Мне нужно больше смотреть на kwargs, кажется милым - person Sharpless512; 19.05.2017