문제

내가하고 싶은 것은 URI로 페이지를 보유하는 미니 CMS를 구축하는 것입니다.

내 urls.py의 마지막 경로는 my views.py의 함수를 가리 며, 현재 요청의 동일한 URI와 함께 사용할 수있는 페이지가있는 경우 데이터 스토어에서 확인하고 페이지를 표시합니다.

나는 모델이있다 :

class Page(db.Model): 
  title = db.StringProperty(required=True) 
  uri = db.TextProperty(required=True) 
  created = db.DateTimeProperty(auto_now_add=True) 
  modified = db.DateTimeProperty(auto_now=True) 
  content = db.TextProperty() 

내 견해로 :

def show(request): 
  page = db.GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get() 
  if page is None: 
    return http.HttpResponseNotFound() 
  else: 
    return respond(request, 'pages_show', {'content': request.path}) 

그리고 데이터 스토어에 URI로 '/work'가있는 엔티티를 추가했습니다.

request.path가 정확히 '/work'인 경우에도 쿼리는 일치를 반환하지 않습니다.

당신이 나에게 줄 수있는 조언에 감사드립니다!

그렇습니다. 저는 파이썬 멍청이입니다. 앱 엔진은 마침내 언어를 배우기에 완벽합니다.

도움이 되었습니까?

해결책

솔루션을 찾았습니다!

문제는 모델에 있습니다.

App Engines Datastore는 TextProperty를 색인하지 않습니다. 이 유형을 사용하는 것이 처음부터 잘못되었으므로 문자열이 표시되는 StringProperty로 변경하여 인덱스가 발생하여 Where 절에서 사용할 수있는 DataStore가 사용할 수 있습니다.

작업 모델의 예 :

   class Page(db.Model): 
      title = db.StringProperty(required=True) 
      // string property now
      uri = db.StringProperty(required=True) 
      created = db.DateTimeProperty(auto_now_add=True) 
      modified = db.DateTimeProperty(auto_now=True) 
      content = db.TextProperty()

다른 팁

명명 된 키워드 인수 ( "uri = : uri")를 사용하는 경우 매개 변수를 명시 적으로 이름을 지정된 키워드에 바인딩해야합니다. 대신에:

# incorrect named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', request.path).get()

당신은 원합니다

# correct named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get()

또는 위치 매개 변수 만 사용할 수 있습니다.

# correct positional parameter
GqlQuery('SELECT * FROM Page WHERE uri=:1', request.path).get()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top