如何从示例中获取用户名部分。com/username/gallery 在 ArchiveIndexView 的情况下?

How to get username part from example.com/username/gallery in case of ArchiveIndexView?

目前我可以通过任何 url 获取当前登录用户的图库,因为

example.com/user/gallery
example.com/user123/gallery
example.com/312any-thing/gallery

这不是我想要的。我想要的是先检查用户是否存在,然后通过 ArchiveIndexView.

提供所需的图库

如何在 ArchiveIndexView class 中获取 example.com/username/图库的 username 部分以实现

user = get_object_or_404(UserProfile, slug=username)

?

# project urls
urlpatterns = [
    url(r'^(?P<slug>[\w.-]+)/', include('profiles.urls', namespace='profiles_user')),
]

# app.urls
urlpatterns = [
    url(r'^$', views.ProfileDetailView.as_view(), name='profiles_home'),
    url(r'^gallery/$', views.ProfileGalleryArchiveIndexView.as_view(), name='profiles_gallery'),
]

# app.views
class ProfileGalleryDateView(object):
    date_field = 'date_added'
    allow_empty = True

class ProfileGalleryArchiveIndexView(ProfileGalleryDateView, ArchiveIndexView):

    def get_queryset(self):
        user = self.request.user  # here I want to get username from url
        user = get_object_or_404(UserProfile, slug=username)
        return Gallery.objects.filter(galleryextended__user=user).is_public()

我尝试从 url 获取 username 使用:

def get_context_data(self, **kwargs):
    context = super(ProfileDetailView, self).get_context_data(**kwargs)
    user = get_object_or_404(UserProfile, pk=kwargs['object'].pk)

get_querysetget_context_data 执行得早。

您的 URL 将用户名捕获为 slug,因此您可以从 self.kwargs['slug'] 获取它。