[英]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.