범위 오류에서 Python3.6.5 + Django2.0 통합 xadmin 배경 클릭 추가 또는 내용 세부 사항 데일리리스트 인덱스 해결

문제에 대한 설명
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 ]

 



추천

출처www.cnblogs.com/zmdComeOn/p/11966117.html