2011-05-23 58 views
1

我正嘗試縮進多選字段中的文本。Django中的SelectField中的縮進文本

def __init__(self): 
    super(RegisterFull,self).__init__() 
    sectorList = Sector.objects.all()  

sArray = []  
for s in sectorList:  
    sArray.append((s.id," "+s.__unicode__())) 
self.fields["subsector"].choices = sArray 

我已經嘗試這樣做,

sArray.append((s.id,"  "+s.__unicode__())) 

然而,我無法實現我想要的東西,因爲「&」字符被替換&(當然)和空的空間被修剪。爲什麼在創建html頁面時?

你可以建議的方式?

謝謝。

回答

1

我建議使用級聯樣式表(CSS)的要格式化的字段。 HTML應該主要關注文檔的佈局,而CSS可以對格式進行微調。所以,添加一個類到你窗體的小部件;

例如,

class UserForm(forms.Form): 
    name = forms.CharField(widget = forms.TextInput(attrs={'class':'indented'})) 

,然後在模板頂部有CSS(或移動到一個獨立的樣式表)

<style type="text/css"> 
.indented { 
    text-indent: 20px; 
} 
</style> 

如果你真的願意,你可以做一些簡單的像:

class UserForm(forms.Form): 
    name = forms.CharField(widget = forms.TextInput(attrs={'style':'text-indent: 20px;'})). 

編輯:爲了讓您的解決方案正常工作(與&nbsp;

from django.utils.safestring import mark_safe 

def __init__(self): 
    super(RegisterFull,self).__init__() 
    sectorList = Sector.objects.all()  

    sArray = []  
    for s in sectorList:  
     sArray.append((s.id,mark_safe("&nbsp; &nbsp; "+s.__unicode__()))) 
     self.fields["subsector"].choices = sArray 
+0

感謝您的回覆,但我想使用multiplechoicefield。列表中有幾個項目,並非全部都縮進。我想確定服務器端的intentede,並將它們呈現爲html。 – brsbilgic 2011-05-23 16:06:06

+0

@ user763256:我仍然建議在CSS中做一個解決方案,可能會根據您的標準服務器端將CSS類更改爲縮進或縮進。 HTML將連續的空格作爲單個空格呈現。您可以使用非打破空間'' ,但是這是不好的,你就必須處理正確轉義/進行反向轉義的HTML,確保其標記爲可安全等 – 2011-05-23 16:13:45

+0

@ user763256:見我的答案的底部,在那裏你'mark_safe',' '讓它在你的模板中呈現爲unicode。小心使用'mark_safe'不要讓自己容易受到CSRF攻擊。例如,如果用戶可以創建諸如指定出現在多選文本中的外鍵字段之類的選擇,則他們可以鏈接到可以做你不想發生的事情的JavaScript代碼。 – 2011-05-23 16:23:12