Django - передавать значение для детализации в шаблон
Существует просмотр для детализации:
def get_viewNum(request, numNom):
md = Nomenclature.objects.get(pk=numNom)
all_changes_for_md = Changes.objects.filter(numNomenclature_id=md.numNom)
return render(request,'Sklad/viewNum.html',context = {'nomenclature':md, 'changes':all_changes_for_md})
Также существует view для отображения таблицы:
class TableView(ListView):
model = Nomenclature
context_object_name = 'nm'
template_name = 'Sklad/viewTable.html'
В шаблоне я вывожу таблицу и хочу, чтобы при нажатии на кнопку происходил переход к детализации нужной номенклатуры. Мой шаблон:
///
{% for item in nm %}
<tr>
<td>{{item.numNom}}</td>
<td>{{item.nameNom}}</td>
<td>{{item.quantity}}</td>
<td>{{item.numPolk}}</td>
<td><a href="{% url 'prosmotr' %}">Просмотр</a></td>
<td><button>Печать</button></td>
</tr>
{% endfor %}
///
Как передать нужный numNom в строку детализации url? Если вы используете следующее:
...
<td><a href="{% url 'prosmotr' item.numNom %}">Просмотр</a></td>
...
Возвращает ошибку:
NoReverseMatch at /table/ Reverse for 'prosmotr' with arguments '('',)' не найдено. Попробовано 1 паттерн(ов): ['news/(?P[^/]+)/\Z']
.
Мой urls.py:
urlpatterns = [
path('', home, name='rashod'),
path('add_changes/',CreateChanges.as_view(), name = 'add_changes'),
path('save', save),
path('inventriz/', inventriz, name='invent'),
path('inventriz/inventr', inventr, name='add_invent'),
path('news/<str:numNom>/',get_viewNum, name='prosmotr'),
path('table/', TableView.as_view(), name = 'viewTable')
]
Так как ваш numNom
является CharField
, то представление должно быть таким:
def get_viewNum(request, numNom):
md = get_object_or_404(Nomenclature, numMom=numNom)
all_changes_for_md = get_list_or_404(Changes,numNomenclature=md)
#....
А в html url:
...
<td><a href="{% url 'prosmotr' item.numNom %}">Просмотр</a></td>
...
``