在 DetailView 中获取 Slug

Sha*_*512 0 python django python-3.x django-1.11

网址.py

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

视图.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
Run Code Online (Sandbox Code Playgroud)

访问网址http://localhost:8000/news/SHOP/

所以我的应用程序要做的是,根据 URL 检索 slug 并使用 Intrinio 的 API 来获得响应。

响应部分都有效,但目前它总是同一家公司(?identifier=SHOP)。我想根据网址使其动态。

但是我对 Django 很陌生,我不确定我应该如何将 slug 传递给 DetailView。我希望你能帮忙。

Ala*_*air 6

您可以访问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,
     ...
     )
Run Code Online (Sandbox Code Playgroud)