我在Ubuntu 12.04上使用Python 2.7的Django 1.4。傳遞DJango模板變量作爲輸入參數
我有一個使用Django的模板語法來生成對象列表的模板。我想在每個項目上創建一個「表單發佈」,以便從列表中刪除該項目。很簡單:
MySQL <remove>
Linux <remove>
Java <remove>
Python <remove>
C++ <remove>
PostgreSQL <remove>
Django <remove>
其中<remove>
是「提交」。
這裏是模板看起來的樣子:
{% if not dev.user.is_superuser %}
{% if dev.user.is_authenticated and dev.user.is_staff %}
<ul>
{% for skill in dev.skill_set.all %}
<form action="/removeSkill/" method="post">{% csrf_token %}
<li>
{{ skill.skill }}
<input type="hidden" name="skill" value={{ skill.skill }}>
<label class="formlabel"> </label>
<input type="submit" value="Remove ►"></li>
</form>
{% endfor %}
</ul>
{% endif %}
我需要知道如何通過{{ skill.skill }}
值作爲隱藏輸入的value
。
有什麼建議嗎?
更新1:
好了,它看起來像我在做什麼模板進行的非常棒。我似乎無法真正從視圖中的數據庫中刪除條目。
def remove_skill(request):
"""
.. function:: remove_skill()
Remove a skill for a developer
:param request: Django Request object
"""
## Create a logging object
path = os.path.join(os.path.dirname(__file__), 'logs/')
filename = '{0}debug.log'.format(path)
logfile = open(filename, 'w')
now = datetime.datetime.now()
logfile.write('\n --------------------- {0}\n'.format(now))
if (request.user.is_authenticated() and request.user.is_staff):
userProfile = UserProfile.objects.get(user_id = request.user.id)
devSkills = DevSkills(dev = userProfile, skill = request.POST.get('skill'))
logfile.write('user = {0}\n'.format(devSkills.dev_id))
logfile.write('skill to remove = {0}\n'.format(devSkills.skill))
devSkills.delete()
logfile.close()
return dev_profile(request)
的debug.log
文件顯示正確的入口信息,但我繼續當我試圖讓下面的錯誤,並刪除一個技能:
DevSkills object can't be deleted because its id attribute is set to None.
建議?
我會嘗試使用'formsets',但看起來我需要做一點重構才能正確使用它 - 對於這樣一個簡單的概念來說,它似乎過於複雜。謝謝您的幫助。 – Rico
在這種情況下會修改'name'參數嗎? - 實際上使用'_ {{skill.id}}'可能會更好。 – Williams
我確定我正在做的是傳遞我想要的信息 - 我似乎無法正確刪除數據庫中的條目。我會更新我的問題。 – Rico