2017-05-06 85 views
0

我需要將div中的字段換行。 在Django的1.10:如何在SelectDateWidget(Django 1.11)中覆蓋template_name

class CustomSelectDateWidget (SelectDateWidget): 
    def render(self, name, value, attrs=None): 
     ... 
     output = [] 
     for field in self._parse_date_fmt(): 
      if field == 'year': 
       output.append('<div class="input-field col s4">' + html['year'] + '</div>') 
      elif field == 'month': 
       output.append('<div class="input-field col s5">' + html['month'] + '</div>') 
      elif field == 'day': 
       output.append('<div class="input-field col s3">' + html['day'] + '</div>') 
     return mark_safe('\n'.join(output)) 

它在Django 1.11 dosn`t工作。 我試圖重寫 '的Django /表格/部件/ select_date.html':

class CustomDateWidget(SelectDateWidget): 
    def get_template_names(self): 
     return ['accounts/custom_select_date.html'] 

但Django的包括而不是我的模板 '的Django /表格/部件/ select_date.html'「賬戶/模板/帳號/ custom_select_date html的」。沒有錯誤消息顯示。

回答

1

所以,我發現了一個簡單的方法來做到這一點來覆蓋它。在我的情況下,我想在ImageField中顯示圖像。這裏是codez:

複製django的clearable_file_input.html模板,自定義並保存到,例如, django_overrides/forms/widgets/clearable_file_input.html,例如:

{% if is_initial %}{{ initial_text }}: <img src="{{ widget.value.url }}" />{% if not widget.required %} 
<input type="checkbox" name="{{ checkbox_name }}" id="{{ checkbox_id }}" /> 
<label for="{{ checkbox_id }}">{{ clear_checkbox_label }}</label>{% endif %}<br /> 
{{ input_text }}:{% endif %} 
<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %} /> 

子類的原始部件,該template_name設置爲您的新模板:

from django.forms import ClearableFileInput 

class CustomClearableFileInputWidget(ClearableFileInput): 
    template_name = 'django_overrides/forms/widgets/clearable_file_input.html' 

更新您的形式使用這個小工具:

class UserProfileForm(ModelForm): 
    class Meta: 
     model = UserProfile 
     exclude = ['id', 'user'] 
     widgets = { 
      'photo': CustomClearableFileInputWidget, 
     } 
+1

您也可以在UserProfileForm:'ClearableFileInput.template_name ='django_overrides/forms/widgets/clearable_file_input.html'中創建CustomClearableFileInputWidget,但是這會覆蓋當前表單中的所有ClearableFileInput。 – Stanislav

1

使用超作爲您使用的是父類創建子類

form = super(CustomSelectDateWidget , self).get_form(form_class) 
+0

謝謝。我發現另一種方法來解決這個SelectDateWidget.template_name ='accounts/custom_select_date.html' – Stanislav

+0

@ctac請你用你的另一種方式創建一個答案?你還需要繼承這個小部件嗎? – jbrown