Хорошо первый прочь никогда не сделать это:
data = Object.objects.filter(name="")
Django имеет all()
функцию, которая будет возвращать все объекты:
data = Object.objects.all()
Во-вторых, я надеюсь, object_view
, data
, object_info
, object.html
не Ваш, имена реальных переменных! Если да, убедитесь, что они имеют смысл для вашей заявки.
Хорошо, вернемся к вашей проблеме. Ну, вам не нужно делать вид для каждого отдельного объекта. Я предполагаю, что <a href="object">...</a>
должен ссылаться на новую страницу, которая будет заполнена выбранным объектом.
Если да, вы хотели бы иметь URL-адреса в тегах <a>
: /objects/object_id/
.
Этот новый URL должен быть определен, как это в urls.py
:
urlpatterns += [
url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'),
]
Обратите внимание на oid
URL-адрес аргумента. Мы будем использовать его для доступа к нашему конкретному объекту.
Теперь ваш оригинальный шаблон, list.html
, должен выглядеть следующим образом:
{% for instance in object_info %}
<li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li>
{% endfor %}
Где мы поставляем instance.id
в oid
URL-адрес аргумента, чтобы создать нечто вроде objects/1/
или objects/2/
т.д.
Теперь, это означает, что вы будете нужно только создать еще один вид с другим шаблоном.
Ваш второй вид object_specific_view
:
def object_specific_view(request, oid): # The url argument oid is automatically supplied by Django as we defined it carefully in our urls.py
object = Object.objects.filter(id=oid).first()
context={
'object':object
}
return render(request, "specific_object.html", context)
Теперь вам просто нужно создать свой specific_object.html
и получить доступ к экземпляру object
, чтобы показать детали конкретного объекта :).
Он делает то, что я хочу сейчас, спасибо! – tchane