문제에 대한 설명
xadmin 백엔드 관리 인터페이스에서 필드의 DateTimeField 유형을,이 경우 모델의 창조는 범위를 벗어리스트 인덱스를보고, 모델 작동 시간을 추가합니다.
이 문서는 모델에서 만든 :
클래스 IDC (models.Model) 이름 = models.CharField (MAX_LENGTH = 64 ) 접촉 = models.CharField (MAX_LENGTH = 32 ) 전화 = models.CharField (MAX_LENGTH = 32 ) 주소 = models.CharField (MAX_LENGTH = 128 ) CREATE_TIME = models.DateField (auto_now = 참) __ 데프 __str (자기) : 리턴 self.name의 클래스 메타 : verbose_name = " IDC机房" verbose_name_plural = verbose_name
다음과 같이 필드 유형 모델 CREATE_TIME 개정 :
CREATE_TIME models.DateTimeField = ()
그런 다음 추가 버튼을 클릭, 그것은 문제를 재현하는 것 "IDC 방"관리 인터페이스를 입력 xadmin 시스템 로그.
문제의 두 가지 원인
정보 제공 우선은, 이미 코드의 오류를 지적했다 :
venv \ lib 디렉토리 \ 사이트 - 패키지 \ xadmin \ widgets.py에서 렌더링, 라인 (80)
특정 코드를 찾을 프롬프트 디렉토리를 따르십시오 :
데프 렌더링 (자기, 이름, 값, 바인드합니다 = 없음) : input_html = [MT 를위한 HT 의 슈퍼 (AdminSplitDateTime, 자기) .render (이름, 값, 바인드합니다) .split ( ' \ n ' ) 의 경우 ! HT = '' ] #에 복귀 input_html 복귀 mark_safe ( ' <div 클래스 = "날짜 clearfix"> <div 클래스 = "입력 족 날짜 스트랩 - 날짜 선택기"> <스팬 클래스 = "입력 기 부가"> <I 클래스 = "FA FA -calendar "> </ I> </ SPAN> % S ' ' <스팬 클래스 ="입력 기 BTN "> <Button 클래스 ="BTN BTN 기본 "TYPE ="버튼 "> S % </ 버튼> </ SPAN> </ div> ' '<div 클래스 = "입력 기 동안의 부트 스트랩-clockpicker"> <스팬 클래스 = "입력 기 부가"> <I 클래스 = "FA FA 클럭 O '> ' ' </ I> </ SPAN> % S <스팬 클래스 = "입력 기 BTN"> <Button 클래스 = "BTN BTN 기본"TYPE = "버튼"> % S </ 버튼> </ SPAN> </ div> </ div> ' % ( input_html [ 0 ] _ (U ' 현재 ' ) input_html [ 1 ] _ (U는 ' 지금 ' )))
코드의 마지막 줄 위에 배치는 코드의 첫 번째 80 선 widgets.py입니다.
input_html 하나 개의 요소는 다음의 에러 메시지에서 input_html 값을 검색 할 수 있기 때문에 input_html [1]는 에러 코드이다 :
[ ' <input 타입 = "텍스트"NAME = "create_time_0"클래스 = "날짜 필드 형태 제어 ' ' admindatewidget"사이즈 = "10"에 필요한 ID = "id_create_time_0"/> <input ' ' TYPE = "텍스트"이름 = "create_time_1"클래스 = "시간 - 양식 필드 제어 ' ' admintimewidget"사이즈 = "8"필요한 ID = "id_create_time_1"/> ' ]
코드를 읽은 후, 다음이 코드를 사용하는 것입니다 "\ n"두 태그 떨어져 input_html하지만, 두 개의 레이블 사이에 줄 바꿈에, 그것은 오류의 결과로 분할 할 수없는 것을 알 수있다.
input_html = [HT 에 대한 HT 에 슈퍼 (AdminSplitDateTime 자기) .render (이름, 값, 바인드합니다) .split ( " \ n " ) 의 경우 HT! = ' ]
저자가 쓴, 그러나 확실히 떨어져 두 가지를 저장할 수있는, 왜 갑자기 성공?
생성 된 코드를 다음 템플릿에서 발견 두 개의 레이블을보고, 계속 :
venv \ lib 디렉토리 \ 사이트 - 패키지 \ 장고 \ 양식 \ 템플릿 \ 장고 \ 양식 \ 위젯 \ multiwidget.html
다음과 같이 HTML 템플릿 코드는 다음과 같습니다
{%의 무한한의 %} {% 위한 위젯 에 widget.subwidgets의 %} {%가 widget.template_name % 포함} {% ENDFOR %} {endspaceless %의 %}
공간을 차지 태그 :
사용법 : {%의 공간을 차지 %의} ... 요약 ... {% endspaceless의 %}
의미 : 모든 둘러싸여 탭 또는 캐리지 리턴 문자의 내용을 삭제
, 공간을 차지하지를 참조 라벨에 문제가 거짓말을 추측, 레이블 추측된다 장고 나중에 추가 된이 버전의 그.
코드보기 장고 Django2.0.1 버전 및 버전 1.11.9의 추측을 확인하기 위해 기록을 제출, 톱 추가 공간을 차지 레코드 레이블을 제출로 제출 된 기록은 다음과 같습니다 :
https://github.com/django/django/commit/47681af34447e5d45f3fdb316497cdf9fbd0b7ce
https://github.com/django/django/commit/c1d57615ac60171a73e1922a48ebc27fe513357e
세 가지 문제 해결
옵션 1을
문제 때문에이 공간을 차지 라벨 납, 다음 삭제 공간을 차지 태그 형태로 템플릿 코드를 추가 템플릿 파일로 인한 문제를 해결할 수 없습니다?
{% 위한 위젯 에 widget.subwidgets %} {% ENDFOR %} {%는 widget.template_name % 포함}
대답은 '예, 우리가 정말 문제를 해결할 수 있습니다.
그러나, 공간을 차지하지 태그 추가 코드로 장고 버그 수정하고, 삭제, 삭제하지 않는 것이 좋습니다 분명 문제는 다른 곳에서 발생하지 않습니다.
반응식 II는
은 "\ n"태그가 분할 될 수 있기 때문에, 그 "/> <"스플릿을 사용하여, 다른 방식으로 분할.
원래 코드 :
input_html = [HT 에 대한 HT 에 슈퍼 (AdminSplitDateTime 자기) .render (이름, 값, 바인드합니다) .split ( " \ n " ) 의 경우 HT! = ' ]
코드를 수정 후 :
input_html = [HT 에 대한 HT 에 슈퍼 (AdminSplitDateTime 자기) .render (이름, 값, 바인드합니다) .split ( " /> < ' ) 의 경우 HT! = ' ] input_html [ 0 ] = input_html [ 0 ] + " / > " input_html [ 1 ] = " < " + input_html [ 1 ]