簡體   English   中英

Django沒有給我反向匹配錯誤

[英]Django giving me no reverse match error

/ errorcodes / error_codes / 2處的NoReverseMatch反向查找“ relatedpartsview”,未找到任何參數。 嘗試了1個模式:['errorcodes \\ / error_codes \\ / relatedparts \\ /(?P [^ /] +)$']

目前,我正在嘗試將PK作為參數傳遞給我的鏈接。 但是,我一直沒有反向比賽。 我添加了一個重定向語句,但這似乎無法解決問題。

views.py

class RelatedPartsListView(ListView):
context_object_name = 'related_parts_list'
model = models.ErrorCodes
template_name = 'related_parts_list.html'


def get_context_data(self, **kwargs):
    # xxx will be available in the template as the related objects
    context = super(ErrorCodeView, self).get_context_data(**kwargs)
    context['relatedparts'] = RelatedParts.objects.filter(related_error_code=self.get_object())
    return context

    return redirect('RelatedPartsListView', pk='pk')

urls.py

urlpatterns = [
path(r'error_codes/',views.ErrorCodeList.as_view(), name='errorcodelist'),
path(r'error_codes/<pk>',views.ErrorCodeView.as_view(), name='errorcodeview'),
path(r'error_codes/relatedparts/<pk>',views.RelatedPartsListView.as_view(), name='relatedpartsview')

]

鏈接

{% url 'errorcodes:relatedpartsview' %}

更新:我得到一個'RelatedPartsListView'對象沒有屬性'get_object'

類RelatedPartsListView(ListView):

context_object_name = 'related_parts_list'
model = models.ErrorCodes
template_name = 'related_parts_list.html'

def get_context_data(self, **kwargs):
    # xxx will be available in the template as the related objects
    obj = super(RelatedPartsListView, self).get_context_data(**kwargs)
    obj = RelatedParts.objects.filter(related_error_code=self.get_object())
    return redirect('related_parts_list', obj.pk)

您嘗試使用{% url %}而不傳遞pk所依賴的pk 您可以在這里參考文檔https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

因此,您應該通過上下文將對象(帶有pk的對象)傳遞到模板。 然后,您可以訪問該對象的pk值。 因此,您將擁有類似的東西。

{% url 'relatedpartsviewurl' obj.pk %}

編輯:您的重定向也沒有任何意義,並且您彼此之間緊接着有兩個return語句,這絕對沒有意義。

編輯:好的,因此您需要在返回的重定向中使模板名稱與URL中name=所顯示的完全相同。 接下來,您需要擺脫上下文,而是將過濾器存儲為obj的變量。 然后對於重定向中的pk ,只需引用該變量,例如redirect('template_name', obj.pk)


編輯:CLASS BASED VIEW(如果可行,則為idk)您的列表視圖。

class RelatedPartsListView(ListView):
    context_object_name = 'related_parts_list'
    model = models.ErrorCodes
    template_name = 'related_parts_list.html'

    def get_context_data(self, **kwargs):
        context = super(RelatedPartsListView, self).get_context_data(**kwargs)
        context['relatedparts'] = RelatedParts.objects.filter(related_error_code=1)
        return context

替換與此相關的URL。

re_path(r'^error_codes/relatedparts/?P<parts_id>[0-9]+',views.RelatedPartsListView.as_view(), name='related_parts_view')

使您的鏈接像這樣。

{% url 'errorcodes:related_parts_view' 1 %}

編輯:基於功能的視圖

views.py

def related_parts_view(request, error_code):
    parts = RelatedParts.objects.filter(related_error_code=error_code)
    context = {
        'relatedparts': parts
    }
    return render(request, 'path/to/my/template.html', context)

urls.py

re_path(r'^error_codes/relatedparts/?P<error_code>[0-9]+', errorcodes.views.related_parts_view, name='related_parts_view')

other_template.html

<a href="{% url errorcodes:related_parts_view' error_code.pk %}">Go to Related Parts</a>

template.html

{% for part in relatedparts %}
    {{ part.pk }}
{% endfor %}

暫無
暫無

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

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