Доступ к UUID couchdb в шаблонах django - PullRequest
2 голосов
/ 13 июля 2011

Я новичок в Couchdb и Django и пытался расширить образец по умолчанию (приветствия), предоставляемый вместе с couchdbkit.При создании базового примера CRUD с использованием существующего примера я не смог получить доступ к идентификатору документа couchdb в шаблоне django

Когда я запускаю что-то подобное

greetings = Greeting.view('greeting/all', descending=False)
for g in greetings:
  print g._id

Он печатается нормально, хотя при передаче его в шаблон с помощью

return render("home.html", {
  "form": form,
  "greet": greet,
  "greetings": greetings
}, context_instance=RequestContext(request))

Используя аналогичный цикл, как упомянуто выше, я могу получить доступ к

{% for g in greetings %}
    <tr>
        <td>{{ g.date|timesince }} </td>
        <td>{{ g.author }} </td>
        <td>{{ g.content }}</td>
    </tr>
{% endfor %}

автору и содержимому, но когда я представил {{g._id}}

Я получаю ошибку TemplateSyntaxError в / Переменные и атрибуты могут не начинаться с подчеркивания: 'g._id'

Может кто-нибудь объяснить, как мне получить доступ к уникальному идентификатору couchdb в django?шаблоны, так как я знаю, что могу получить доступ к «_id» в view.py, это не проблема с couchdbkit, проблема заключается в том, чтобы обойти, вероятно, в view.py преобразование _id в id или что-то в этом роде.

Как уже упоминалось, я новичок в django, поэтому, возможно, вопрос может быть немного глупым сам по себе.

PS: я использую coucdb 1.0.2, django 1.3.0 и python 2.6

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 октября 2014

Другой вариант - получить к нему доступ с помощью шаблона

from django import template
register = template.Library()

@register.filter(name='get')
def get(d, k):
    return getattr(d, k)

. Затем в своем HTML-коде вы можете получить к нему доступ:необходимо сделать это для каждого объекта, к которому вы хотите получить доступ, что делает его СУХИМЫМ.

0 голосов
/ 13 июля 2011

Причина ошибки шаблона проста: Django не позволяет вам получить доступ к атрибутам объектов, которые начинаются с подчеркивания.Причина этого мне неизвестна, но по соглашению атрибуты, начинающиеся с подчеркивания, являются «частными» в Python.Поэтому я предполагаю, что Django заставляет разработчиков не делать таких вещей, как их плохой стиль.

Фрист, ты должен убедиться, что нет другого способа получить доступ к идентификатору (например,get_id() или что-то).Если нет, вы можете обойти вашу проблему: Скопируйте _id в новый атрибут для каждого приветствия.

greetings = Greeting.view('greeting/all', descending=False)
for g in greetings:
    setattr(g, 'couchId', g._id)

Теперь у каждого экземпляра в приветствии есть новый атрибут couchID, где вы можете получить доступ к значению _id.Это работает, потому что динамическая природа Pythons позволяет вам изменять что-либо во время выполнения - вы даже можете создавать или удалять атрибуты.

На ваш взгляд, вы можете просто сделать:

{% for g in greetings %}
<tr>
    <td>{{ g.couchId }} </td>
    <td>{{ g.date|timesince }} </td>
    <td>{{ g.author }} </td>
    <td>{{ g.content }}</td>
</tr>
{% endfor %}
...