簡體   English   中英

在基於Django 1.5的類視圖中訪問URL變量

[英]Accessing URL variables in Django 1.5 class-based view

我正在將項目從Django 1.2遷移到Django 1.5。 該項目使用了基於函數的視圖,例如:

def notecard_product(request, stockcode):
    if request.user.is_authenticated(): 
        liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=request.user)
        unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=request.user)
        extra_context = {"liked" : liked, "unliked":unliked}
    else:
        extra_context = {"liked" : [0], "unliked": [0]}
    return object_detail(request, queryset=Product.objects.live(),
                         object_id=stockcode,
                         extra_context=extra_context,
                         template_name='products/notecard.html', template_object_name='notecard_product')`enter code here`

在此摘錄中,從URL捕獲了stockcode代碼, stockcode其用於確定object_id 所以我想知道如何在基於類的視圖中執行此操作。 這是我到目前為止的內容:

class NotecardProductListView(ListView):
    queryset=Product.objects.live()
    pk=self.kwargs['stockcode']
    template_name='products/notecard.html'
    context_object_name='notecard_product'

    def get_context_data(self, **kwargs):
        context = super(BooksListView, self).get_context_data(**kwargs)
        if self.request.user.is_authenticated(): 
            liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=self.request.user)
            unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=self.request.user)
            extra_context = {"liked" : liked, "unliked":unliked}
        else:
            extra_context = {"liked" : [0], "unliked": [0]}
        context.update(extra_context)
        return context

pk是舊object_id kwarg的新名稱。 顯然,此代碼不起作用,因為我無法在函數外部訪問self 但是我不確定如何做到這一點。 我需要在關鍵字參數中將pk設置為某種值,但找不到解決方法,因為pk需要在任何函數之外的類主體中設置。 我也沒有辦法進行試驗和嘗試,因為由於不贊成使用的函數調用,整個項目現在都已中斷。

謝謝!

我不確定您是從哪里得知pkobject_id的新名稱,也不確定為什么您認為需要將其設置為每個請求的值。 基於類的視圖中的類級別屬性的要點是,它們是按視圖類而不是按實例設置的:它們是指視圖將去查找值的位置,而不是實際值本身。

您的第一個錯誤是,舊的object-detail視圖的等效部分毫不奇怪object-detailDetailView而不是ListView 如文檔所示,ListView能夠通過繼承自SingleObjectMixin來顯示對象詳細信息。 該mixin需要一個名為pk_url_kwarg的類級別的屬性,該屬性是從URL捕獲的參數的名稱,該參數標識對象的PK:在您的情況下,這是字符串 'stockcode' 實例本身負責在任何特定請求中查找該值,您無需這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM