2013-11-29 29 views
1

特別是,使用可選正則表達式的頁面。可選的,我的意思是下面的PAGE_RE。css在除兩個頁面以外的所有頁面上工作

我正在創建一個Wiki。如果用戶搜索一個術語,並且該術語尚不存在,那麼用戶將被重定向到編輯頁面,以便他們可以創建新內容。但是,只有在用戶登錄後纔會發生。要確定用戶是否已登錄,我檢查cookie。如果用戶沒有登錄(沒有cookie),那麼我重定向,而不是編輯頁面,以創建新的內容,但登錄頁面,由下面的Login類處理。用戶登錄後,會創建一個cookie,然後將其重定向到編輯頁面以創建它們最初搜索的內容。爲了記住他們的主題是什麼,所以我可以在登錄後重定向,我將主題(形式爲'/topic')發送到登錄類,它在getpost方法中作爲參數接收。如果用戶剛剛來到網站並正常登錄,他們被重定向到主頁,但在這種情況下,因爲主題已被getpost收到,而不是None,我使用下面的行self.redirect('/edit/%s' % topic[1:])發送他們到他們原來的目的地。問題是,CSS不適用於下面使用PAGE_RE的兩個URL。 JsFiddler4顯示有404個涉及/login/css/wiki.css。它突然點擊一段時間後,該網址不是登錄頁面的網址,當它收到額外的'主題'參數。 EditPage也是這種情況。如果有時候他們有些不同,我怎樣才能讓css在這些頁面/ url上工作?我不知道發生了多少事情,然後我下載並運行JsFiddler4並找出它。我正在使用Google App Engine,webapp2,jinja2。任何幫助非常感謝。除了這兩頁之外,css還能正常工作。

這段代碼是無序和不完整的,但我希望這是足夠

PAGE_RE = r'(/?(?:[A-Za-z0-9_-]+/?)*)' 
app = webapp2.WSGIApplication([ 
    ('/signup', Register), 
    ('/logout', Logout), 
    ('/login' + PAGE_RE, Login), 
    ('/edit' + PAGE_RE, EditPage), 
    ('/', Front), 
    (PAGE_RE, WikiPage), 
], debug=True) 



class Login(Main): 
    """ Validate form and validate users cookie """ 

    def get(self, topic): 
     self.render('login.html', error={}) 

    def post(self, topic): 

     username = self.request.get('username') 
     password = self.request.get('password') 

     if not username or not self.valid(user=username): 
      self.login_error(user=username) 
     elif not password or not self.valid(pw=password): 
      self.login_error(user=username) 
     elif not self.user_exists(username): 
      self.render('login.html', error={'no_user':'That user does not exist'}) 
     else: 
      self.login(username, password, topic=topic) 

    def login(self, name, pw, topic): 
     user_hash = User.get_user_hash(name)  
     if self.valid_pw(name, pw, user_hash): 
      self.create_secure_cookie('user_id', name) 
      if topic: 
       self.redirect('/edit/%s' % topic[1:]) 
      else: 
       self.redirect('/') 
     else: 
      self.login_error(user=name) 

    def login_error(self, user): 
     self.render('login.html', username=user, error={'login': errors['login']}) 

    def valid_pw(self, name, pw, user_hash): 
     salt = user_hash.split('|')[0] 
     return user_hash == self.create_user_hash(name, pw, salt) 
+0

當您在Inspector中查看不工作的頁面時,它在什麼路徑查找CSS文件? –

+0

有趣..剛剛檢查,當我直接進入登錄頁面(正常情況下),它看起來在正確的位置'/css/wiki.css'。但是,當我將搜索頁面中的登錄頁面重定向到主題,並將其傳遞給Login類時,它會在「login/css/wiki.css」中搜索css文件。我目前不知道爲什麼會發生這種情況..猜猜我必須找出何時何地將「登錄」部分添加到路徑中。 – Totem

回答

0

好吧,我解決了這個。這似乎正在發生。 這個重定向發送參數登錄類以上:

self.redirect('login/%s' % wiki_topic) #wiki_topic = something like 'topic' 

尋找的CSS頁面時,似乎什麼發生的是,路徑到'/'的最後部分去掉,並取而代之的是css的路徑,'/css/wiki.css'就是我的情況。

所以我是路過的登錄/主題「,只是「主題」是由CSS路徑替換給:

'login/css/wiki.css',而不是正確只是'css/wiki/css'.

要阻止這種情況發生,我將行重定向到Login類:

self.redirect('login/%s' % wiki_topic) to >> self.redirect('login%s' % wiki_topic) 

第二個版本在%s之前沒有斜槓。

相關問題