سؤال

ما أريد القيام به هو بناء بعض سم المصغرة التي تعقد صفحات مع أوري.

والطريق الماضي في نقاطي urls.py إلى وظيفة في بلدي views.py، والذي يتحقق في مخزن البيانات إذا كان هناك صفحة المتاحة مع نفس اوري من الطلب الحالي، وإذا كان الأمر كذلك عرض الصفحة.

ولدي نموذج:

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}) 

ولقد أضاف كيان مع '/ العمل "كما اوري إلى مخزن البيانات.

وحتى عندما request.path هو بالضبط '/ العمل "، الاستعلام لا يرجع المباراة.

وشكرا لأية نصيحة كنت تستطيع أن تعطيني!

ونعم، أنا مستجد الثعبان، محرك التطبيقات مثالية لتعلم أخيرا اللغة.

هل كانت مفيدة؟

المحلول

ولقد وجدت الحل!

والمشكلة تكمن في النموذج.

والتطبيقات محركات مخزن البيانات لا مؤشر على TextProperty. باستخدام هذا النوع من الخطأ من البداية، لذلك أنا تغييره إلى StringProperty، التي لا تحصل على فهرستها، وبالتالي الذي يسمح لنا مخزن البيانات لاستخدامها في جملة WHERE.

مثال لنموذج العمل:

   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()

نصائح أخرى

إذا كنت تستخدم الحجج الكلمات الرئيسية المسماة ( "اوري =: أوري")، لديك لربط صراحة المعلمات في الكلمة مسمى. بدلا من:

# 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