【问题标题】:TemplateSyntaxError in Django appDjango 应用程序中的 TemplateSyntaxError
【发布时间】:2011-04-06 06:12:54
【问题描述】:

您好,我正在尝试使用 django-facebook connect 使用 Ajax 为我的 django 应用程序实现 facebook 登录。我正在关注此链接以实现它facebook-django integration with ajax。这样做时,我遇到了这个错误“ TemplateSyntaxError at /registrationForm/

'facebookconnect' 不是有效的标签库:找不到模板库 facebookconnect,尝试 django.templatetags.facebookconnect,django.contrib.admin.templatetags.facebookconnect,facebookconnect.templatetags.facebookconnect ”。我将在此处粘贴我的错误日志. 环境:

Request Method: GET
Request URL: http://10.1.0.90:8080/registrationForm/
Django Version: 1.2.5
Python Version: 2.6.5
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'universityDetails',
 'django.contrib.admin',
 'captcha',
 'facebookconnect',
 'social_auth']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.csrf.CsrfResponseMiddleware',
 'universityDB.FacebookConnectMiddleware.FacebookConnectMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'facebook.djangofb.FacebookMiddleware',
 'facebookconnect.middleware.FacebookConnectMiddleware')


Template error:
In template /home/ravi/Desktop/universityDB/templates/registrationForm.html, error at line 75
   'facebookconnect' is not a valid tag library: Template library facebookconnect not found, tried django.templatetags.facebookconnect,django.contrib.admin.templatetags.facebookconnect,facebookconnect.templatetags.facebookconnect
   65 :   <p style="clear:both;float:left;">


   66 :     <input type="submit" value="Log in" />


   67 :     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;


   68 :     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a HREF="http://10.1.0.90:8080/forgotPassword/">Forgotten your password?</a></p>


   69 :   </div>


   70 : </form>


   71 : <br>


   72 : 


   73 : <p>Login via facebook!</p>


   74 : 


   75 :  {% load facebookconnect %} 


   76 : {% facebook_connect_login_button %}


   77 : 


   78 : {% facebook_connect_script %}


   79 : 


   80 : 


   81 : 


   82 : <br>


   83 : <br>


   84 : <br>


   85 : <br>


Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  100.                     response = callback(request, *callback_args, **callback_kwargs)
File "/home/ravi/Desktop/universityDB/../universityDB/universityDetails/views.py" in registrationForm
  50.     return render_to_response("registrationForm.html")
File "/usr/local/lib/python2.6/dist-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in render_to_string
  181.         t = get_template(template_name)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in get_template
  157.     template, origin = find_template(template_name)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in find_template
  134.             source, display_name = loader(name, dirs)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in __call__
  42.         return self.load_template(template_name, template_dirs)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in load_template
  48.             template = get_template_from_string(source, origin, template_name)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in get_template_from_string
  168.     return Template(source, origin, name)
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in __init__
  158.         self.nodelist = compile_string(template_string, origin)
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in compile_string
  186.     return parser.parse()
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in parse
  282.                     compiled_result = compile_func(self, token)
File "/usr/local/lib/python2.6/dist-packages/django/template/defaulttags.py" in load
  928.                                       (taglib, e))

Exception Type: TemplateSyntaxError at /registrationForm/
Exception Value: 'facebookconnect' is not a valid tag library: Template library facebookconnect not found, tried django.templatetags.facebookconnect,django.contrib.admin.templatetags.facebookconnect,facebookconnect.templatetags.facebookconnect

我的目录结构是

universityDB/   
        universityDetails
           models.py
           views.py
           urls.py
        templates/
                xd_receiver.htm
        templatetags/
        __init__.py
        facebookconnect.py

我的 facebookconnect.py 是

from django import template
from django.conf import settings
from django.core.urlresolvers import reverse

register = template.Library()

class FacebookScriptNode(template.Node):
        def render(self, context):
            return """
            <script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

            <script type="text/javascript"> FB.init("%s", "%s");
                function facebook_onlogin() {
                    var uid = FB.Facebook.apiClient.get_session().uid;
                    var session_key = FB.Facebook.apiClient.get_session().session_key;
                    var expires = FB.Facebook.apiClient.get_session().expires;
                    var secret = FB.Facebook.apiClient.get_session().secret;
                    var sig = FB.Facebook.apiClient.get_session().sig;

                    fb_connect_ajax(expires, session_key, secret, uid, sig);

                }

                function fb_connect_ajax(expires, session_key, ss, user, sig) {

                    var post_string = 'expires=' + expires;
                    post_string = post_string + '&session_key=' + session_key;
                    post_string = post_string + '&ss=' + ss;
                    post_string = post_string + '&user=' + user;
                    post_string = post_string + '&sig=' + sig;

                    $.ajax({
                        type: "POST",
                        url: "%s",
                        data: post_string,
                        success: function(msg) {
                            window.location = '%s'; //.reload()
                        }
                    });
                } 
            </script>       
            """ % (settings.FACEBOOK_API_KEY, reverse('xd_receiver'), reverse('facebook_connect_ajax'), settings.LOGIN_REDIRECT_URL)


def facebook_connect_script(parser, token): return FacebookScriptNode()

register.tag(facebook_connect_script)

class FacebookLoginNode(template.Node):
    def render(self, context): 
        return "<fb:login-button onlogin='facebook_onlogin();'></fb:login-button>"

def facebook_connect_login_button(parser, token): return FacebookLoginNode()

register.tag(facebook_connect_login_button)

【问题讨论】:

  • facebookConnect.py 还是facebookconnect.py
  • 它是 facebookconnect.py

标签: python django django-models facebook django-templates


【解决方案1】:

您的facebookConnect.py 文件必须在您的templatetags 包中(它必须有一个__init__.py 才能使其成为一个包)。

在您的settings.INSTALLED_APPS 设置中,您似乎也添加了facebookconnect,即使这不是应用程序(根据您的目录结构)。相反,您应该将 universityDB.universityDetails 列为应用程序。

【讨论】:

  • wat 应该是 init.py 文件的内容吗? facebookconnect.py 在我的 templatetags 文件夹中
  • 我将 universityDB.universityDetails 添加到我安装的应用程序中,并在模板标签中添加了 init.py 文件。现在我收到此错误“AlreadyRegistered at /registrationForm/ The model UniversityDetails is already registered”
  • 听起来您正在以两种不同的方式导入models.py,旧式和绝对式。如果您通过绝对路径(例如import universityDB.universityDetails.models)导入模块,然后通过旧式(例如在universityDB/universityDetails/views.py 中您使用import models)导入它,该模块实际上将被导入两次!不要这样做!
  • 我现在更改了它..但仍然有同样的旧错误..“facebookconnect”不是有效的标签库:找不到模板库 facebookconnect,尝试 django.templatetags.facebookconnect,django.contrib。 admin.templatetags.facebookconnect,facebookconnect.templatetags.facebookconnect"
  • 确保您的模块中没有语法错误或类似问题。打开一个 shell python manage.py shell 并导入你的模块:import universityDB.universityDetails.templatetags.facebookconnect
猜你喜欢
  • 2011-03-26
  • 2012-05-26
  • 2014-01-17
  • 2020-06-16
  • 1970-01-01
  • 2011-11-13
  • 2021-09-08
  • 2020-10-15
  • 2011-05-07
相关资源
最近更新 更多