جانغو وظيفة القالب رابط يست مطابقة في التطبيق

StackOverflow https://stackoverflow.com/questions/1801165

سؤال

ولدي مشروع جانغو اقامة مع حانة التطبيق يسمى. أنا أحاول أن إعداده لدرجة أنني يمكن أن تشمل urls.py من كل التطبيق (سيكون هناك المزيد وأنا أذهب) في urls.py. المستوى الأعلى لقد حصلت أيضا على القالب الذي يستخدم الدالة 'رابط' لحل رابط على وجهة نظر، المحددة في وحدة openidgae. المشكلة هي أنه بعد يتم توجيه httprequest إلى pub.views.index (مثل أنه من المفترض أن)، وأنا أحاول أن تستجيب من خلال تقديم نموذج يستخدم الدالة قالب "رابط". رمز أنا يظهر أدناه هو أيضا هنا: http://gist.github.com/243158

إليك يا urls.py المستوى الأعلى:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
   (r'', include('openidgae.urls')),
   (r'^pub', include('pub.urls')),  
)

ووحانة / urls.py:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
   (r'', 'pub.views.index'),
   (r'^/$', 'pub.views.index'),
)

ووالقوالب / base.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
    <div id="header">
     {% if lip %}
        Welcome {{ lip.pretty_openid }}
        <a href="{% url openidgae.views.LogoutSubmit %}">logout</a>
     {% else %}
        <form id="login-form" action="{% url openidgae.views.OpenIDStartSubmit %}?continue={{continueUrl}}" method="post">
            <input type="text" name="openid_identifier" id="openid_identifier" />
            <input type="submit" value="Verify" />
        </form>

        <!-- BEGIN ID SELECTOR --> 
        <script type="text/javascript" id="__openidselector" src="https://www.idselector.com/selector/46b0e6d0c8ba5c8617f6f5b970865604c9f87da5" charset="utf-8"></script>
        <!-- END ID SELECTOR -->
     {% endif %}
    </div>
{% block content %}{% endblock %}
</body>
</html>

ووالقوالب / مقهى / index.html و:

{% extends "base.html" %}

{% block title %}blahblah!{% endblock %}

{% block content %}
  blahblahblah
{% endblock %}

وأخيرا، حانة / views.py:

from django.shortcuts import render_to_response
from django.http import HttpResponse
from django import forms
import openidgae

def index(request):
    lip = openidgae.get_current_person(request, HttpResponse())
    resp = render_to_response('pub/index.html', {'lip': lip})
    return resp

والآن، وإذا كنت تعيين النمط الثاني في بلدي urls.py المستوى الأعلى لتشير مباشرة إلى 'pub.views.index، كل يعمل كما ينبغي، ولكن ليس إذا كنت تستخدم وظيفة تشمل.

وأي أفكار؟ أنا متأكد من أن المشكلة لها أن تفعل شيئا مع URLPATTERN التي من شأنها أن الخريطة آراء أحاول حل لعناوين المواقع التي لا تتوفر على وظائف تقديم القالب عندما تتم معالجة HttpRequest من قبل التطبيق حانة بدلا من المستوى الأعلى ، لكنني لا أفهم لماذا أو كيفية إصلاحه.

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

المحلول

ويمكنك اضافة الكثير من التعليمات البرمجية، ولكنك لم تكن واضحة جدا حول ما هي المشكلة الفعلية. أولا وقبل كل وجود

(r'', 'pub.views.index'),
(r'^/$', 'pub.views.index'),

ويمكن أن تعطي بعض المشاكل إذا كنت ترغب في العثور على عنوان URL. ما يجب أن يكون رابط لpub.views.index؟ من ما تقوله، وهذا هو في الواقع لن يكون مشكلة، لأن لم يكن لديك علامة القالب الذي تريد عكس وجهة النظر المذكورة. أنت لا تقول فعلا ما يحدث خطأ. ولكن وسيلة لعلاج هذه المشكلة المذكورة أعلاه، إذا كنت ترغب في الاحتفاظ عناوين اثنين، سيكون لاستخدام عناوين المواقع مسمى. أجد أنه قليلا زائدة عن الحاجة حيث يمكنك فقط إعادة توجيه example.com/pub إلى example.com/pub/، ولكن هل يمكن تحويل ما سبق ما يلي:

url(r'', 'pub.views.index' name='pub_a'),
url(r'^/$', 'pub.views.index', name='pub_b'),

والقيام بذلك وأنت الآن قادرة على عكس عنوان موقعك، كما يمكنك تحديد فريد لهم القيام {% url pub_a %} أو {% url pub_b %}. وهذا من شأنه أيضا أن يجعل القوالب الخاصة بك أسهل للقراءة، كما يمكنك إعطاء الأسماء التي تعني شيئا، لذلك فمن الأسهل أن نتذكر ما يحدث، في حين يجري أكثر إيجازا.

نصائح أخرى

وأنا لا أفهم ما هي المشكلة التي كنت تواجه، ولكن فقط من خلال النظر في ملفات urls.py الخاص بك، ربما يجب عليك تغيير كبير urls.py مستوى لشيء من هذا القبيل

from django.conf.urls.defaults import *

urlpatterns = patterns('',
   (r'', include('openidgae.urls')),
   (r'^pub/', include('pub.urls')),  
)

ووpub/urls.py إلى:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
   (r'^$', 'pub.views.index'),
)

وإذا كنت ثم استخدام {% url pub.views.index %} في مكان ما في القوالب الخاصة بك، يجب عليك الحصول على عنوان الموقع الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top