প্রিয় জ্যাঙ্গো টিপস এবং বৈশিষ্ট্যগুলি?


308

প্রশ্নগুলির সিরিজ 'এর লুকানো বৈশিষ্ট্যগুলি ...' দ্বারা অনুপ্রাণিত হয়ে আমি আপনার পছন্দসই জ্যাঙ্গো টিপস বা আপনার পরিচিত কম পরিচিত তবে দরকারী বৈশিষ্ট্যগুলি সম্পর্কে শুনতে আগ্রহী।

  • দয়া করে, প্রতি উত্তরে কেবল একটি টিপ অন্তর্ভুক্ত করুন।
  • জ্যাঙ্গো সংস্করণ প্রয়োজনীয়তাগুলি যুক্ত করুন।

উত্তর:


221

আমি কেবল নিজের থেকে একটি টিপ দিয়ে শুরু করতে যাচ্ছি :)

হার্ডকোডড ডাইরনামগুলি এড়াতে সেটিংস.পিটিতে os.path.dirname () ব্যবহার করুন।

আপনি যদি আপনার প্রকল্পটি বিভিন্ন জায়গায় চালাতে চান তবে আপনার সেটিংসে হার্ডকোড পাথ করবেন না py আপনার টেমপ্লেট এবং স্ট্যাটিক ফাইলগুলি জাঙ্গো প্রকল্প ডিরেক্টরিতে অবস্থিত থাকলে সেটিংসে.পিতে নিম্নলিখিত কোডটি ব্যবহার করুন:

# settings.py
import os
PROJECT_DIR = os.path.dirname(__file__)
...
STATIC_DOC_ROOT = os.path.join(PROJECT_DIR, "static")
...
TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "templates"),
)

ক্রেডিট: স্ক্রিনকাস্ট ' জ্যাঙ্গো ফ্রম দ্য গ্রাউন্ড আপ ' থেকে আমি এই টিপটি পেয়েছি ।


75
আপনার নিজের প্রশ্নের উত্তর দেওয়া লোককে আপনার নিম্নচাপ করা উচিত নয়। এটি উত্সাহিত হয়, যদিও এটি পূর্ব নির্ধারিত হয়।
পাওলো বার্গান্টিনো

19
এটি এমন একটি ভাল ধারণা যে এটি ডিফল্ট নয় কেন আমার এখনও বুঝতে খুব কষ্ট হয়েছে। কতজন লোক একই মেশিনে পরীক্ষা করে নিযুক্ত করে?
সিঙ্গেলাইজেশন ইলিমিনেশন

19
এই সবসময় থেকে বিপদ দূর করে টাইপ os.path.join () যা বিরক্তিকর বেশ দ্রুত পায়: j = lambda filename: os.path.join(PROJECT_DIR, filename)। তারপরে আপনার শুধু টাইপ করা দরকার j("static")
কব্জি

13
আপনি যদি উইন্ডোতে থাকেন তবে ব্যাকস্ল্যাশগুলি প্রতিস্থাপন করুন: os.path.join (PROJECT_DIR, "টেমপ্লেট") replace প্রতিস্থাপন করুন ('\\', '/')
পিটার মর্টেনসেন

7
আপনি যদি জ্যাঙ্গোতে এটি স্থির করতে চান তবে এই সিদ্ধান্তটি পুনর্বিবেচনার জন্য কোর ডিভাসকে জিজ্ঞাসা করে কোড.ডজ্যাঙ্গোপ্রজেক্ট / টিকেট / 69৯৪ এ একটি মন্তব্য করুন wontfix
21:42

128

জ্যাঙ্গো কমান্ড এক্সটেনশানগুলি এবং পাইগ্রাভিজ ইনস্টল করুন এবং তারপরে সত্যিই দুর্দান্ত দেখাচ্ছে জ্যাঙ্গো মডেলের ভিজ্যুয়ালাইজেশন পেতে নিম্নলিখিত কমান্ডটি জারি করুন:

./manage.py graph_models -a -g -o my_project.png

দুর্দান্ত, উইন্ডোজটিতে সঠিকভাবে ইনস্টল করার জন্য পাইগ্রাভিজটি পেল না, তবে গ্রাফভিজ ব্যবহার করে ডট ফাইল থেকে এখনও গুপ্তচর থাকতে পারে।
monkut

আমি এই সাথে মডেল ডায়াগ্রামে ভাগ করতে ভালোবাসি স্পষ্টভাবে একটি +1
BozoJoe

এর জন্য কি কোনও এসজিজি বিকল্প রয়েছে?
কিও

আউটপুট চিত্রটি এখন ব্যস্ত হয়ে পড়েছে বলে মনে হচ্ছে
ব্রায়ান উইগিংটন

119

ব্যবহারের জ্যাঙ্গো-বিরক্তিকর render_to পরিবর্তে প্রসাধক render_to_response

@render_to('template.html')
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return {'bars': bars}

# equals to
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return render_to_response('template.html',
                              {'bars': bars},
                              context_instance=RequestContext(request))

এটি চিহ্নিত করার জন্য সম্পাদনা করা হয়েছে যে কোনও এইচটিপিআরস্পোনস (যেমন একটি পুনর্নির্দেশ) ফেরত দেওয়ালীর শর্ট সার্কিট করবে এবং আপনার প্রত্যাশা অনুসারে কাজ করবে।


4
@ বেকমিংগুরু - এটি স্বয়ংক্রিয়ভাবে ঘটে।
ডমিনিক রজার

15
এটি ঠিক আছে, আপনি যদি কিছু HTTPResponseRedirect () গুলি এবং কিছু রেন্ডার_ থেকে_উত্তেজক () গুলি না ফেরত থাকেন তবে। তারপরে পুনঃনির্দেশগুলি ব্যর্থ হয়।
ম্যাথু শিনকেল

17
আমি এটা পছন্দ করি না। "অন্তর্নিহিতের চেয়ে সুস্পষ্ট ভাল"। সাজসজ্জারটি ঠিক কখন এটি রেন্ডার_তে চলেছে তা বলছে না।
ট্যামস সেজেলি

2
@ ম্যাথেজ শিনকেল আসলে পুনর্নির্দেশগুলি জগাখিচুড়ি করে না - আপনি যদি কোনও এইচটিপ্রেস্পনসন বস্তুটি ফিরিয়ে দেন তবে এটি কেবল পরিবর্তন না করেই এটি পাস করে দেয়
জিয়াআরো

20
আমি বিশ্বাস করি এই পন্থাটি এখন জ্যাঙ্গো ১.৩ অনুসারে অপ্রয়োজনীয়, django.shortcuts.render () ডকস.ড্যাঞ্জোপ্রজেক্ট
ডলফ

101

কাস্টম ট্যাগগুলির একটি সেট রয়েছে যা আমি আমার সাইটের টেমপ্লেট জুড়ে ব্যবহার করি। এটি অটোলাড করার কোনও উপায় খুঁজছেন (ডিআরওয়াই, মনে আছে?), আমি নিম্নলিখিতগুলি পেয়েছি:

from django import template
template.add_to_builtins('project.app.templatetags.custom_tag_module')

আপনি যদি এটি কোনও ডিফল্টরূপে লোড হওয়া মডিউলে রাখেন (উদাহরণস্বরূপ আপনার মূল urlconf), আপনি ব্যবহার না করে কোনও টেমপ্লেটে আপনার কাস্টম ট্যাগ মডিউল থেকে উপলব্ধ ট্যাগ এবং ফিল্টার পাবেন {% load custom_tag_module %}

আর্গুমেন্টটি template.add_to_builtins()যে কোনও মডিউল পাথ হতে পারে; আপনার কাস্টম ট্যাগ মডিউল একটি নির্দিষ্ট অ্যাপ্লিকেশন বাস করতে হবে না। উদাহরণস্বরূপ, এটি আপনার প্রকল্পের মূল ডিরেক্টরিতে (উদাহরণস্বরূপ 'project.custom_tag_module') মডিউলও হতে পারে ।


@ স্টিফ, আপনি আমাকে অনেক সময় / হৃদয় ব্যথা / বাইট সংরক্ষণ করেছেন, ধন্যবাদ
orokusaki

সত্যিই সুন্দর. ধন্যবাদ। এছাড়াও কাস্টম ট্যাগগুলির একটি সংগ্রহস্থল স্টাফ ভাগ করে নেওয়া দুর্দান্ত হবে, আপনি কি ভাবেন না?
লেয়ান্ড্রো আরডিসোন

অন্য কেউ আপনার কোড বজায় না করা পর্যন্ত এটি দুর্দান্ত। ভাবুন: "ন্যূনতম যাদুর নীতি"
ধনী

96

ভার্চুয়ালেনভ + পাইথন = লাইফ সেভার যদি আপনি একাধিক জ্যাঙ্গো প্রকল্পে কাজ করছেন এবং এমন সম্ভাবনা রয়েছে যে তারা সকলেই জ্যাঙ্গো / অ্যাপ্লিকেশনটির একই সংস্করণের উপর নির্ভর করে না।


15
এটি রোল করার একমাত্র উপায়!
পোস্টফিউচারিস্ট

3
আপনি কি জ্যাঙ্গোর সাথে ভার্চুয়ালেনভের জন্য কিছু টিউটোরিয়াল লিঙ্ক যুক্ত করতে পারেন?
বোজোও

2
@BozoJoe: আপনার টার্মিনাল জন্য এই রকম কোরো: virtualenv myNewEnv --no-site-packages; . myNewEnv/bin/activate; pip install django; এবং এটি ঠিক কাজ করে!
সিঙ্গেলাইজেশন ইলিমিনেশন

87

আপনার ইউআরএলগুলি হার্ড-কোড করবেন না!

পরিবর্তে ইউআরএল নামগুলি , এবং reverseURL টি নিজেই পেতে ফাংশনটি ব্যবহার করুন ।

আপনি যখন আপনার ইউআরএল ম্যাপিংগুলি সংজ্ঞায়িত করেন তখন আপনার ইউআরএলগুলিতে নাম দিন।

urlpatterns += ('project.application.views'
   url( r'^something/$', 'view_function', name="url-name" ),
   ....
)

নিশ্চিত হয়ে নিন যে URL প্রতি নামটি অনন্য।

আমার কাছে সাধারণত একটি সুসংগত ফর্ম্যাট থাকে "প্রজেক্ট-অ্যাপ্লিকেশন-ভিউ", যেমন থ্রেড দৃশ্যের জন্য "সিবিএক্স-ফোরাম-থ্রেড"।

আপডেট (নির্লজ্জভাবে আয়াজের সংযোজন চুরি করা ):

এই নামটি urlট্যাগ সহ টেম্পলেটগুলিতে ব্যবহার করা যেতে পারে ।


1
আমি এটিতে 100% সম্মত আমি হার্ড কোডেড ইউআরএলগুলি ব্যবহার শুরু করেছি এবং কিছু পরিবর্তন সামঞ্জস্য করার জন্য আমি যখন ইউআরএল ফর্ম্যাটটি কিছুটা পরিবর্তিত করেছিলাম তখনই এটি একটি প্রকল্পে আমার কাছে আসে। আমি ফিরে যেতে এবং সমস্ত কিছু খনন এবং হার্ড কোডড ইউআরএলগুলি প্রতিস্থাপন করতে সময় নিয়েছি। আমার একমাত্র বড় অভিযোগ হ'ল ইউআরএল ট্যাগ ত্রুটিগুলি পুরো পৃষ্ঠাটি মেরে ফেলেছে যখন হার্ড কোডড কেবলমাত্র ব্যক্তিগত লিঙ্কটিকেই গণ্ডগোল করে।
ধনী

21
এটি কোনও লুকানো বৈশিষ্ট্য হওয়া উচিত নয়, এটি সর্বোত্তম অনুশীলন এবং উড়ানোর একমাত্র উপায়।
Skylar Saveland

1
@ স্পাইল এটি "উড়ানের একমাত্র উপায়" খুব কমই। আমি একটি জ্যাঙ্গো দেব স্প্রিন্টে ছিলাম এবং অ্যাড্রিয়ান হলোভাটি (জ্যাঙ্গোর অন্যতম স্রষ্টা) বলেছিলেন যে তিনি urlট্যাগটি ব্যবহার করেন না ... তাঁর বক্তব্য হ'ল ইউআরএলগুলি যে কোনওভাবেই পরিবর্তন করা উচিত নয় (যদি আপনি আপনার সাথে বন্ধুত্বপূর্ণ হতে চান তবে ব্যবহারকারী)।
টিএম

আপনি এটিও টেমপ্লেটগুলিতে {% url path.to.view.name arg1 arg2 %} ডকস.জেঞ্জোপ্রজেক্ট
এন /

আপনি যদি জিনজা 2 ব্যবহার করেন, কেবল এটির reverseমতো যুক্ত করুন environment.filters['url'] = django.core.urlresolvers.reverseএবং আপনি এটির মতো টেমপ্লেটগুলিতেও এটি ব্যবহার করতে পারেন: {{ 'view-name'|url(arg1, arg2)|e }}(এইচটিএমএল অন্তর্ভুক্তির জন্য কিছু অক্ষর থেকে বাঁচতে "ই" প্রয়োজন)
সিঙ্গেল নেজেশন ইলিমিনেশন

81

জ্যাঙ্গো ডিবাগ টুলবার ব্যবহার করুন । উদাহরণস্বরূপ, এটি ভিউ রেন্ডার করার সময় সম্পাদিত সমস্ত এসকিউএল কোয়েরিগুলি দেখতে দেয় এবং আপনি এগুলির যে কোনওটির জন্য স্ট্যাকট্রেসও দেখতে পারেন।


79

আপনার নিজের লগইন পৃষ্ঠা লিখবেন না। আপনি যদি django.contrib.auth ব্যবহার করছেন।

আসল, নোংরা রহস্যটি হ'ল আপনি যদি django.contrib.admin, এবং django.template.loaders.app_directories.load_template_source আপনার টেম্পলেট লোডারে রাখেন তবে আপনি নিজের টেম্পলেটগুলিও বিনামূল্যে পেতে পারেন!

# somewhere in urls.py
urlpatterns += patterns('django.contrib.auth',
    (r'^accounts/login/$','views.login', {'template_name': 'admin/login.html'}),
    (r'^accounts/logout/$','views.logout'),
)

1
শান্ত! আমি জানতাম না যে আমরা প্রশাসকদের লগইন পৃষ্ঠাটি পুনরায় ব্যবহার করতে পারি। ধন্যবাদ!
জোশুয়া পার্টোগি

66

প্রসঙ্গত প্রসেসরগুলি দুর্দান্ত।

বলুন আপনার আলাদা ব্যবহারকারী মডেল রয়েছে এবং আপনি প্রতিটি প্রতিক্রিয়ায় এটি অন্তর্ভুক্ত করতে চান। এটি করার পরিবর্তে:

def myview(request, arg, arg2=None, template='my/template.html'):
    ''' My view... '''
    response = dict()
    myuser = MyUser.objects.get(user=request.user)
    response['my_user'] = myuser
    ...
    return render_to_response(template,
                              response,
                              context_instance=RequestContext(request))

প্রসঙ্গ প্রক্রিয়াগুলি আপনাকে আপনার টেমপ্লেটগুলিতে কোনও পরিবর্তনশীল পাস করার ক্ষমতা দেয় ability আমি সাধারণত আমার মধ্যে রাখি 'my_project/apps/core/context.py:

def my_context(request):
    try:
        return dict(my_user=MyUser.objects.get(user=request.user))
    except ObjectNotFound:
        return dict(my_user='')

আপনার settings.pyসাথে নিম্নলিখিত লাইনটি যুক্ত করুনTEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    'my_project.apps.core.context.my_context',
    ...
)

এখন প্রতিবার একটি অনুরোধ করা হলে এতে my_userস্বয়ংক্রিয়ভাবে কীটি অন্তর্ভুক্ত থাকে ।

এছাড়াও সংকেত জয়।

আমি কয়েক মাস আগে এই সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলাম তাই আমি কেবল কাটা এবং পেস্ট করতে যাচ্ছি:

বাক্সের বাইরে জ্যাঙ্গো আপনাকে কয়েকটি সংকেত দেয় যা অবিশ্বাস্যভাবে কার্যকর। আপনার কাছে সংরক্ষণের আগে, পোস্ট করার আগে, পোস্ট করতে, মুছতে, বা অনুরোধটি প্রক্রিয়া করা হচ্ছে এমন কি করার ক্ষমতা রয়েছে। সুতরাং ধারণাগুলি থেকে দূরে সরে আসুন এবং এগুলি কীভাবে ব্যবহৃত হয় তা প্রদর্শিত হবে। বলুন আমরা একটি ব্লগ পেয়েছি

from django.utils.translation import ugettext_lazy as _
class Post(models.Model):
    title = models.CharField(_('title'), max_length=255)
    body = models.TextField(_('body'))
    created = models.DateTimeField(auto_now_add=True)

সুতরাং কোনওভাবেই আমরা একটি নতুন পোস্ট তৈরি করেছি, সাম্প্রতিক পোস্টের ক্যাশেটি পুনর্নির্মাণ করেছি এবং এটি সম্পর্কে টুইট করেছি blog ভাল সংকেত সহ পোস্ট ক্লাসে কোনও পদ্ধতি যুক্ত না করেই আপনি এগুলি করার সমস্ত ক্ষমতা রাখেন।

import twitter

from django.core.cache import cache
from django.db.models.signals import post_save
from django.conf import settings

def posted_blog(sender, created=None, instance=None, **kwargs):
    ''' Listens for a blog post to save and alerts some services. '''
    if (created and instance is not None):
        tweet = 'New blog post! %s' instance.title
        t = twitter.PostUpdate(settings.TWITTER_USER,
                               settings.TWITTER_PASSWD,
                               tweet)
        cache.set(instance.cache_key, instance, 60*5)
       # send pingbacks
       # ...
       # whatever else
    else:
        cache.delete(instance.cache_key)
post_save.connect(posted_blog, sender=Post)

সেখানে আমরা সেই ফাংশনটি সংজ্ঞায়িত করে এবং পোস্ট-মডেলটির সাথে ফাংশনটি সংযুক্ত করতে পোস্ট_আইনাইট সংকেত ব্যবহার করে এবং এটি সংরক্ষণ করার পরে এটি কার্যকর করি।


4
ওয়েব ফ্রেমওয়ার্কগুলির সাথে তুলনা করার সময় জাজানো সিগন্যালগুলি আজকাল আমার জন্য একটি আবশ্যক বৈশিষ্ট্য। একটি স্বচ্ছভাবে মিলিত ফোরাম লিখুন, বলুন, এটি "স্বাক্ষর" মডিউল থেকে আপডেট শুনতে, বলতে পারে, তবে আসলে সেই মডিউলটির কাজ করা প্রয়োজন হয় না এবং এটি একই বৈশিষ্ট্যটি বাস্তবায়নের জন্য সামঞ্জস্যপূর্ণ মডিউলগুলির সাথেও কাজ করতে পারে, দুর্দান্ত। আমি জানি না কেন সংকেতগুলি বেশি পরিচিত এবং জনপ্রিয় হয় না।
লি বি

আমরা যদি আমাদের প্রকল্পে কিছু পুনর্ব্যবহারযোগ্য অ্যাপ্লিকেশন ব্যবহার করি তবে সাধারণভাবে টাইট কাপলিং এবং কোড জগাখিচুড়ি এড়াতে সিগন্যালগুলি খুব গুরুত্বপূর্ণ। আপনি এর জন্য জাজো অ্যাপ্লিকেশনগুলির আলগা সংযোগের জন্য একটি দুর্দান্ত উদাহরণ সরবরাহ করেছেন।
লুকাসজ কোরজিবস্কি

আপনি কি জানেন সংকেত async হয় কিনা?
কেদারে

"বলুন আপনার আলাদা ব্যবহারকারী মডেল রয়েছে এবং আপনি প্রতিটি প্রতিক্রিয়ায় এটি অন্তর্ভুক্ত করতে চান" " - ব্যবহারকারীকে সেশনে রাখুন । এটি আপনাকে প্রতিটি অনুরোধের জন্য একটি ডাটাবেস হিট সংরক্ষণ করে।
জামন

সিগন্যালের কলগুলি সিঙ্ক্রোনাস। আমার মতে, টুইটার / ফেসবুক / ইত্যাদিতে (যেমন - রাবিটেমকিউ) প্রকাশ করার জন্য, একরকম অ্যাসিনক্রোনাস জব মেকানিজম আরও উপযুক্ত, তাই ওয়েবসাইটের ব্যবহারকারীরা অনুরোধে ঝুলিয়ে রাখেন না।
গারস্কি

58

যখন আমি শুরু করছিলাম, আমি জানতাম না যে একজন প্যাগেইনেটর ছিলেন , নিশ্চিত হন যে আপনি এর অস্তিত্ব সম্পর্কে জানেন!


2
: ডি আমার জন্য একই! আমি দিন কাটাতে কাটিয়েছি!
ভাইকিংগুন্ডো

46

ব্যবহারের IPython IPython শক্তি ব্যবহার করে যে কোনও স্তর এবং ডিবাগ এ আপনার কোড মধ্যে তিড়িং লাফ করতে। একবার আপনি আইপিথন ইনস্টল করার পরে যেখানেই আপনি ডিবাগ করতে চান সেখানে এই কোডটি প্রবেশ করুন:

from IPython.Shell import IPShellEmbed; IPShellEmbed()()

তারপরে পৃষ্ঠাটি রিফ্রেশ করুন, আপনার রানসারভার উইন্ডোতে যান এবং আপনি একটি ইন্টারেক্টিভ আইপিথন উইন্ডোতে থাকবেন।

আমি টেক্সটমেটে একটি স্নিপেট সেট আপ করেছি যাতে আমি কেবল আইপশেল টাইপ করি এবং ট্যাবটি হিট করি। আমি ছাড়া বাঁচতে পারি না।


22
আরও ভাল ইনস্টল করুন ipdbএবং তারপরে কেবল টাইপ করুনipdb.set_trace()
টমাসজ জিলিস্কি

অথবা Eclipse / PyDev এর ডিবাগার ব্যবহার করুন। :-)
jMyles

3
আমদানি আইপিডিবি; ipdb.set_trace () FTW!
হাসেসেক

43

একটি বিকাশ এসএমটিপি সার্ভার চালান যা এতে যা কিছু প্রেরিত হয় কেবল তা আউটপুট করে (আপনি যদি সত্যই আপনার ডেভ সার্ভারে এসএমটিপি ইনস্টল করতে না চান।)

কমান্ড লাইন:

python -m smtpd -n -c DebuggingServer localhost:1025

12
আপনি একই উদ্দেশ্যে জঙ্গো 1.2 তে কনসোল এবং ফাইল ইমেল ব্যাকেন্ডগুলি ব্যবহার করতে পারেন
দিমিত্রি শেভচেঙ্কো

অসামান্য! নিবন্ধনের জন্য নিখুঁত! +1
BozoJoe

3
সেটিংস সহ জ্যাঙ্গো 1.2 এর বিকল্প: EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' .. এটি manage.pyআউটপুটটিতে ইমেলটি প্রিন্ট করবে ।
vdboor

41

থেকে জ্যাঙ্গো-অ্যাডমিন ডকুমেন্টেশন :

আপনি যদি শ্যাশ শেল ব্যবহার করেন তবে জ্যাঙ্গো ব্যাশ সমাপ্তি স্ক্রিপ্টটি ইনস্টল করার বিষয়টি বিবেচনা করুন যা extras/django_bash_completionজাঙ্গো বিতরণে থাকে। এটি ট্যাব-সমাপ্তি django-admin.pyএবং manage.pyআদেশগুলি সক্ষম করে, যাতে আপনি উদাহরণস্বরূপ ...

  • প্রকার django-admin.py
  • সমস্ত উপলভ্য বিকল্প দেখতে [ট্যাব] টিপুন।
  • sqlযাদের নাম দিয়ে শুরু হয় এমন সমস্ত উপলভ্য বিকল্প দেখতে, টাইপ করুন [তারপরে] sql

1
এটি আমার প্রত্যাশার চেয়ে বেশি কার্যকর। ধন্যবাদ!
Jeeyoung কিম

এটি অন্তত নতুন উবুন্টুতে ডিফল্টরূপে। :-) এটি প্রথম কোথাও থেকে বেরিয়ে এলে আমি অবাক হয়েছি।
ওডিনহো - ভেলমন্ট

40

./manage.py runserver_plusFacilty যা দিয়ে আসে django_extensions সত্যিই সন্ত্রস্ত।

এটি একটি বর্ধিত ডিবাগ পৃষ্ঠা তৈরি করে যা অন্যান্য জিনিসের মধ্যে, স্ট্যাকের প্রতিটি পয়েন্টের জন্য ইন্টারেক্টিভ ডিবাগিং কনসোলগুলি তৈরি করতে স্ক্রিনশটটি দেখুন (স্ক্রিনশট দেখুন) ze এটি dump()কোনও অবজেক্ট / ফ্রেম সম্পর্কিত তথ্য প্রদর্শনের জন্য খুব দরকারী সুবিধাজনক ডিবাগিং পদ্ধতিও সরবরাহ করে ।

এখানে চিত্র বর্ণনা লিখুন

ইনস্টল করতে, আপনি পিপ ব্যবহার করতে পারেন:

pip install django_extensions
pip install Werkzeug

তারপরে 'django_extensions'আপনার INSTALLED_APPSটিপলটিতে যুক্ত করুন settings.pyএবং নতুন এক্সটেনশান দিয়ে বিকাশ সার্ভারটি শুরু করুন:

./manage.py runserver_plus

এটি আপনার ডিবাগ করার পদ্ধতি পরিবর্তন করবে।


37

জ্যাঙ্গো প্রকল্পগুলি ডিবাগ করার জন্য আমি পাইথন ডিবাগার পিডিবি ব্যবহার করতে চাই।

এটি কিভাবে ব্যবহার করতে শেখার জন্যে একটি সহায়ক লিঙ্ক: http://www.ferg.org/papers/debugging_in_python.html


13
এটি একটি গডসেন্ড। আরও কিছু তথ্য দেওয়ার জন্য, কেবল এটি যুক্ত করুন: আপনার কোডের যে কোনও লাইনে "আমদানি করুন pdb; pdb.set_trace ()"। আপনার পৃষ্ঠা রিফ্রেশ এটি ঝুলবে। এখন আপনার টার্মিনাল উইন্ডোতে যান যেখানে আপনি বিকাশ সার্ভার চালাচ্ছেন। এটি এখন একটি ইন্টারেক্টিভ শেল হওয়া উচিত যেখানে আপনি আপনার ভেরিয়েবলগুলি অ্যাক্সেস করতে পারবেন যেখানে সেগুলি আপনার কোডের সেই বিন্দুতে রয়েছে যেখানে আপনি ডিবাগ কোডটি আটকান।
পুরোহিত

37

জ্যাঙ্গো এবং অন্য অ্যাপ্লিকেশনটির মধ্যে ডেটা বিনিময় করার চেষ্টা করার সময়, request.raw_post_dataএকটি ভাল বন্ধু। এটি এক্সএমএল ডেটা গ্রহণ এবং কাস্টম-প্রক্রিয়া করতে ব্যবহার করুন।

ডকুমেন্টেশন: http://docs.djangoproject.com/en/dev/ref/request-response/


5
কীভাবে আপনি এটি করেন।
থানকিউ

36

জঙ্গো পাশাপাশি জিনজা 2 ব্যবহার করুন ।

যদি আপনি জ্যাঙ্গো টেম্পলেট ভাষাটিকে অত্যন্ত সীমাবদ্ধ (আমার মতো!) দেখতে পান তবে আপনাকে এটির সাথে আটকা পড়তে হবে না। জ্যাঙ্গো নমনীয়, এবং টেমপ্লেট ভাষাটি শিথিলভাবে বাকি সিস্টেমের সাথে মিলিত হয়, সুতরাং কেবলমাত্র অন্য একটি টেম্পলেট ভাষা প্লাগ-ইন করুন এবং আপনার HTTP প্রতিক্রিয়াগুলি রেন্ডার করতে এটি ব্যবহার করুন!

আমি জিঞ্জা 2 ব্যবহার করি , এটি প্রায় জ্যাঙ্গো টেম্পলেট ভাষার সংস্করণ হিসাবে চালিত, এটি একই বাক্য গঠন ব্যবহার করে এবং বিবৃতিগুলিতে আপনাকে এক্সপ্রেশন ব্যবহার করতে দেয়! যদি আর কোনও কাস্টম তৈরি হয় না যেমন-ট্যাগগুলি if_item_in_list! আপনি কেবল বলতে পারেন %{ if item in list %}, বা {% if object.field < 10 %}

কিন্তু এখানেই শেষ নয়; এটিতে টেমপ্লেট তৈরি করা সহজ করার জন্য আরও অনেকগুলি বৈশিষ্ট্য রয়েছে, যা আমি এখানে যেতে চাই না।


আমি জিনজা 2ও ব্যবহার করি এবং উপভোগ করি তবে আমি খুঁজে পেয়েছি যে "অবদান" অ্যাপ্লিকেশনগুলিতে কয়েকটি দম্পতি রয়েছে। বিশেষত, অ্যাডমিন সরঞ্জামটি বেশ ভারীভাবে জ্যাঙ্গো টেম্পলেটগুলির সাথে আবদ্ধ। এছাড়াও, আমাকে জিনজা 2 বন্ধুত্বপূর্ণ হওয়ার জন্য অবদানের জন্য লগইন সজ্জকারগুলি পুনরায় তৈরি করতে হয়েছিল, তবে খুব বেশি কঠিন নয়।
জো হোলোয়

24
জিনজা 2 দিয়ে টেম্পলেট সিস্টেমটি প্রতিস্থাপন করবেন না, কেবল এটি "যোগ করুন", জ্যাঙ্গো টেম্পলেটগুলি সরিয়ে ফেলবেন না। আপনার নিজের মতামতের জন্য জিনজা 2 ব্যবহার করুন এবং অ্যাডমিন ইন্টারফেসটি জ্যাঙ্গো টেম্পলেট ভাষা ব্যবহার চালিয়ে যেতে দিন।
হেসেন

4
আমি এর সাথে সত্যই একমত। জ্যাঙ্গোর সীমাবদ্ধ বাক্য গঠন বেশিরভাগ সময় সহনীয়, তবে আপনি যখন কাস্টম ট্যাগগুলি তৈরি করার বিষয়টিতে পৌঁছান এবং বাস্তবে এটি কতটা শক্ত তা খুঁজে পান, জিনজা 2 টাটকা বাতাসের
শ্বাসকষ্ট

এছাড়াও, আপনি যদি টেমপ্লেট উত্সে কোনও রূপান্তর করতে চান তবে জিনজা 2 অনেক বেশি আনন্দদায়ক, যেহেতু আপনি পার্সড টেম্পলেটগুলির এএসটি সরাসরি অ্যাক্সেস করতে পারবেন। এএসটি চলার ফলে কোন টেমপ্লেটগুলি বেস টেম্পলেটটি প্রসারিত করে তা নির্ধারণ করা বা টেম্পলেট উত্স ব্লকে আনবাউন্ড ভেরিয়েবল তালিকাভুক্ত করার মতো কাজকে প্রায় তুচ্ছভাবে সহজ করে তোলে।
rcoder

5
ধন্যবাদ
জাজানো

35

যোগ assert Falseআপনার ভিউ কোডে ডিবাগ তথ্য ডাম্প করতে।


4
আমি মনে করি মিথ্যাবাদটি আরও স্বজ্ঞাত বলে মনে হয় = ডি
জিয়ারো

13
আপনি যদি জঞ্জো ডেভ সার্ভারে আপনার প্রকল্পটি চালাচ্ছেন তবে পাইথনের পিডিবি মডিউলটি ব্যবহার করুন। এটি ডিবাগ করার অনেক বেশি শক্তিশালী উপায়: পিডিবি আমদানি; pdb.stack_trace ()
mazelife

পিডিবি খুব দরকারী, আপনি ডিবাগিংয়ের সময় খুব দ্রুত না থাকলে আপনার সংযোগগুলি শেষ হয়ে যাওয়ার সম্ভাবনা রয়েছে।
স্টিফেন পলগার 9

4
আমি সবসময় 5 / 0নিজেকে ব্যবহার করি। পাঁচটি কেন? কোন ধারণা নেই.
জেসনস্মিত 13

পছন্দ করেছেন আমার ব্রাউজারটি (ফায়ারফক্স / ডাব্লু ফায়ারব্যাগ) আমি ডিবাগ করার সময় প্রতিক্রিয়াটির জন্য কয়েক মিনিট অপেক্ষা করতে সামগ্রী বলে মনে হচ্ছে।
টিএম

34

এটি জ্যাঙ্গো ইউআরএল নাম এবং উল্টো ইউআরএল প্রেরণের সম্পর্কে উপরের উত্তরে যুক্ত করে ।

ইউআরএল নামগুলি কার্যকরভাবে টেমপ্লেটগুলির মধ্যেও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, প্রদত্ত ইউআরএল প্যাটার্নের জন্য:

url(r'(?P<project_id>\d+)/team/$', 'project_team', name='project_team')

আপনার টেমপ্লেটগুলিতে নিম্নলিখিতগুলি থাকতে পারে:

<a href="{% url project_team project.id %}">Team</a>

27

যেহেতু জ্যাঙ্গো "দেখা" কেবল কলযোগ্য হতে হবে যা কোনও এইচটিপিআরস্পোনকে ফিরিয়ে দেয়, আপনি খুব সহজেই ক্লাস-ভিত্তিক মতামত তৈরি করতে পারেন যেমন রবি অন রেল এবং অন্যান্য ফ্রেমওয়ার্কগুলিতে।

শ্রেণিভিত্তিক দৃষ্টিভঙ্গি তৈরি করার বিভিন্ন উপায় রয়েছে, এখানে আমার প্রিয়:

from django import http

class RestView(object):
    methods = ('GET', 'HEAD')

    @classmethod
    def dispatch(cls, request, *args, **kwargs):
        resource = cls()
        if request.method.lower() not in (method.lower() for method in resource.methods):
            return http.HttpResponseNotAllowed(resource.methods)
        try:
            method = getattr(resource, request.method.lower())
        except AttributeError:
            raise Exception("View method `%s` does not exist." % request.method.lower())
        if not callable(method):
            raise Exception("View method `%s` is not callable." % request.method.lower())
        return method(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return http.HttpResponse()

    def head(self, request, *args, **kwargs):
        response = self.get(request, *args, **kwargs)
        response.content = ''
        return response

আপনি আপনার বেস ভিউতে শর্তাধীন অনুরোধ পরিচালনা এবং অনুমোদনের মতো অন্যান্য ধরণের স্টাফ যুক্ত করতে পারেন।

একবার আপনার মতামত সেটআপ হয়ে গেলে আপনার ইউআরএল.পি এটির মতো দেখতে পাবেন:

from django.conf.urls.defaults import *
from views import MyRestView

urlpatterns = patterns('',
    (r'^restview/', MyRestView.dispatch),
)

2
এফডাব্লুআইডাব্লু, জ্যাঙ্গো
ব্রোজার /

3
যদি আপনি কোনও কল পদ্ধতি যুক্ত করেন তবে আপনি রেস্টুলআর রিসোর্স নামে একটি শ্রেণি তৈরি করতে পারেন এবং তারপরে আপনার urls.py পয়েন্টটি উদাহরণগুলিতে রাখতে পারেন।
স্টিফেন পলগার

1
নতুন (জাজানো 1.3?) জেনেরিক ভিউগুলি শ্রেণিবদ্ধ।
গারস্কি

21

এর পরিবর্তে ব্যবহার করার render_to_responseএকটি টেমপ্লেটে আপনার কনটেক্সট বাঁধে এবং এটি রেন্ডার করতে (যা কি জ্যাঙ্গো ডক্স সাধারণত দেখান) জেনেরিক দৃশ্য ব্যবহার direct_to_template। এটি একই জিনিসটি render_to_responseকরে কিন্তু এটি স্বয়ংক্রিয়ভাবে টেমপ্লেট প্রসঙ্গে অনুরোধকন্টেক্সট যুক্ত করে, স্পষ্টভাবে প্রসঙ্গ প্রসেসরগুলি ব্যবহার করার অনুমতি দেয়। আপনি নিজে এটি ব্যবহার করে করতে পারেন render_to_responseতবে কেন বিরক্ত করবেন? এটি মনে রাখার জন্য আরও একটি পদক্ষেপ এবং অন্য একটি এলওসি। কনটেক্সট প্রসেসরের ব্যবহার করা ছাড়াও, আপনার টেমপ্লেটে রিকোয়েস্টকন্টেক্সট থাকা আপনাকে এই জাতীয় জিনিসগুলি করতে দেয়:

<a href="{{MEDIA_URL}}images/frog.jpg">A frog</a> 

যা খুব দরকারী। আসলে, সাধারণভাবে সাধারণ দৃষ্টিভঙ্গিগুলিতে +1 on জাজানো দস্তাবেজগুলি এগুলিকে সর্বাধিক অ্যাপ্লিকেশনগুলির জন্য ভিউ.পি ফাইল না রাখার জন্য শর্টকাট হিসাবে দেখায় তবে আপনি সেগুলি আপনার নিজের দর্শন ফাংশনগুলির মধ্যেও ব্যবহার করতে পারেন:

from django.views.generic import simple

def article_detail(request, slug=None):
    article = get_object_or_404(Article, slug=slug)
    return simple.direct_to_template(request, 
        template="articles/article_detail.html",
        extra_context={'article': article}
    )

জ্যাঙ্গো-বিরক্তিকর মধ্যে উপলভ্য @ রেন্ডার_টো সাজসজ্জার ব্যবহার করে আরও বেশি এলওসি সংরক্ষণ করুন। bitbucket.org/offline/django-annoying
pithyless

6
.. অথবা renderজ্যাঙ্গো ১.৩ থেকে নতুন শর্টকাট পদ্ধতি ব্যবহার করুন ( ডকস.ডজ্যাঙ্গোপ্রজেক্ট
জেন

20

প্রশ্নের মন্তব্যে জবাব দেওয়ার মতো যথেষ্ট খ্যাতি আমার নেই, তবে এটি লক্ষ্য করা গুরুত্বপূর্ণ যে আপনি যদি জিনজা ব্যবহার করতে চলেছেন তবে এটি টেমপ্লেট ব্লকের নামগুলিতে '-' অক্ষরকে সমর্থন করে না, যখন জাঙ্গোও করে। এটি আমাকে প্রচুর সমস্যা সৃষ্টি করেছিল এবং এটি তৈরি করা খুব অস্পষ্ট ত্রুটি বার্তাটি সন্ধান করার জন্য সময় নষ্ট করে।


একটি নোট যা "জিনজা থেকে অস্পষ্ট ত্রুটি বার্তাগুলি" এর ক্ষেত্রে প্রযোজ্য বা নাও হতে পারে। সেটিংস.পি-তে TEMPLATE_DEBUG = মিথ্যা সেট করা নিশ্চিত করুন। কোনও কারণে এটি আপনাকে জিনজা টেমপ্লেটগুলি থেকে অর্থপূর্ণ ত্রুটি দেয়।
কার্ল জি

19

Webdesign অ্যাপ্লিকেশন যখন আপনার ওয়েবসাইট ডিজাইন করার জন্য শুরু খুবই দরকারী। একবার আমদানি হয়ে গেলে, আপনি নমুনা পাঠ্য উত্পন্ন করতে এটি যুক্ত করতে পারেন:

{% load webdesign %}
{% lorem 5 p %}

4
এফওয়াইআই, যেহেতু জ্যাঙ্গো টেমপ্লেটের পরিবর্তে জিনজা 2 ব্যবহার করছেন, আপনি এটি করতে পারেন: {{ঠোঁট (5)}}
জো হোলোয়

19

django.db.models.get_model আপনাকে কোনও মডেল এটি আমদানি না করে পুনরুদ্ধার করতে দেয়।

জেমস এটি কতটা সুবিধাজনক হতে পারে তা দেখায়: "জ্যাঙ্গো টিপস: আরও ভাল টেমপ্লেট ট্যাগ লিখুন - Iteration 4"


সুন্দর: ও! এবং যখনই আমি বিজ্ঞপ্তি নির্ভরতা ছিল আমি এখানে অলস আমদানি করছিলাম।
ফিলিপ দুপানোভিć

19

সকলেই জানেন যে একটি ডেভলপমেন্ট সার্ভার রয়েছে আপনি "ম্যানেজ.পি রানার্সভার" দিয়ে চালাতে পারেন, তবে আপনি কি জানেন যে স্ট্যাটিক ফাইলগুলি (সিএসএস / জেএস / আইএমজি) পরিবেশন করার জন্য একটি বিকাশ দৃশ্য রয়েছে?

নতুনরা সর্বদা বিস্মিত হন কারণ জ্যাঙ্গো স্থিতিশীল ফাইলগুলি সরবরাহ করার কোনও উপায় নিয়ে আসে না। এটি কারণ কারণ দেব দলটি মনে করে যে এটি বাস্তব জীবনের ওয়েব সার্ভারের কাজ।

তবে বিকাশ করার সময় আপনি অ্যাপাচি + মোড_উইগজি সেট আপ করতে নাও চান, এটি ভারী। তারপরে আপনি কেবল url.py এ নিম্নলিখিতগুলি যুক্ত করতে পারেন:

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': '/path/to/media'}),

আপনার সিএসএস / জেএস / আইএমজি www.yoursite.com/site_media/ এ উপলব্ধ।

অবশ্যই, এটি উত্পাদন পরিবেশে ব্যবহার করবেন না।


6
আমি এটি ডেভ মোডে ব্যবহার করি এবং কেবলমাত্র উত্পাদনে আমি এটি বন্ধ করতে ভুলে যাব না তা নিশ্চিত করার জন্য, আমি সেই ইউআরএল বিধিটি কেবল শর্তসাপেক্ষে একটি ডিইবিইউজে গুটিয়ে রাখি।
সাগোহেল

18

সোর্ল-থাম্বনেইলের জন্য ডকুমেন্টেশন থেকে আমি এটি শিখেছি অ্যাপ্লিকেশনটির । আপনার টেমপ্লেটের অন্য কোথাও কলটির ফলাফলগুলি ব্যবহার করতে আপনি টেমপ্লেট ট্যাগগুলিতে "হিসাবে" কীওয়ার্ডটি ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ:

{% url image-processor uid as img_src %}
<img src="{% thumbnail img_src 100x100 %}"/>

এটি জাজানো টেম্পলেটটি ডকুমেন্টেশনে পাস করার ক্ষেত্রে উল্লেখ করা হয়েছে তবে কেবল লুপগুলির প্রসঙ্গে। তারা কল করে না যে আপনি এটিকে অন্য কোথাও (কোথাও?) ব্যবহার করতে পারেন।


7
টেমপ্লেট-ট্যাগের সাথে "হিসাবে" কোনও কীওয়ার্ড ব্যবহার করা গেলে এই নির্দিষ্ট ট্যাগটির উপর নির্ভর করে। এটি নিজেই জাঙ্গো দ্বারা সংজ্ঞায়িত করা হয়নি তবে একক ট্যাগ দ্বারা বোঝানো হয়েছে, যার অর্থের উপর নির্ভর করে। "হিসাবে" কীভাবে ব্যবহৃত হয় তা দেখতে উল্লিখিত ইউআরএল-ট্যাগটিতে একবার দেখুন: কোড. djangoproject.com/browser/django/trunk/django/template/…
ভাইকিংগুন্ডো

16

django.views.generic.list_detail.object_list - এটি পৃষ্ঠাসমূহের জন্য সমস্ত যুক্তি এবং টেম্পলেট ভেরিয়েবল সরবরাহ করে (যাদের মধ্যে আমি হাজার-বার-এখন- ড্রডগ্রিজ লিখেছি। তার মধ্যে একটি)। এটি মোড়ানো আপনার যে কোনও যুক্তির প্রয়োজন হয়। এই রত্নটি আমার "অনুসন্ধান ফলাফল" পৃষ্ঠাগুলিতে একের পর এক ত্রুটিগুলি ডিবাগিংয়ের অনেক ঘন্টা বাঁচিয়েছে এবং প্রক্রিয়াটিতে ভিউ কোডকে আরও পরিষ্কার করে।


1
আপনি djangobook.com/en/2.0/chapter11 এ জেনেরিক ভিউ সম্পর্কিত বইয়ের অধ্যায়ের নতুন সংস্করণটি পেতে পারেন । মন্তব্যে একটি জাজানো প্রাক -১.০ সংস্করণে যায় (
জাজানো


14

XML_models ব্যবহার করুন জ্যাঙ্গো মডেলগুলি তৈরি করুন যা একটি এক্সএমএল REST এপিআই ব্যাকএন্ড (এসকিউএল পরিবর্তে) ব্যবহার করে। বিশেষত তৃতীয় পক্ষের API গুলি মডেলিং করার সময় এটি খুব দরকারী - আপনি যে একই ক্যোরিসেট সিনট্যাক্স ব্যবহার করেছেন সেগুলি পাবেন। আপনি এটি পিপিআই থেকে ইনস্টল করতে পারেন।

একটি এপিআই থেকে এক্সএমএল:

<profile id=4>
    <email>joe@example.com</email>
    <first_name>Joe</first_name>
    <last_name>Example</last_name>
    <date_of_birth>1975-05-15</date_of_birth>
</profile>

এবং এখন অজগর:

class Profile(xml_models.Model):
    user_id = xml_models.IntField(xpath='/profile/@id')
    email = xml_models.CharField(xpath='/profile/email')
    first = xml_models.CharField(xpath='/profile/first_name')
    last = xml_models.CharField(xpath='/profile/last_name')
    birthday = xml_models.DateField(xpath='/profile/date_of_birth')

    finders = {
        (user_id,):  settings.API_URL +'/api/v1/profile/userid/%s',
        (email,):  settings.API_URL +'/api/v1/profile/email/%s',
    }

profile = Profile.objects.get(user_id=4)
print profile.email
# would print 'joe@example.com'

এটি সম্পর্ক এবং সংগ্রহগুলি পরিচালনা করতে পারে। আমরা এটি প্রতিদিন প্রচুর ব্যবহৃত উত্পাদনের কোডে ব্যবহার করি, যদিও এটি বিটা হলেও এটি খুব ব্যবহারযোগ্য। এটিতে স্টাবগুলির একটি ভাল সেট রয়েছে যা আপনি আপনার পরীক্ষাগুলিতে ব্যবহার করতে পারেন।

(অস্বীকৃতি: যদিও আমি এই গ্রন্থাগারের লেখক নই, আমি এখন কিছু প্রতিশ্রুতিবদ্ধ হয়ে কয়েকটি ছোট ছোট অঙ্গীকার করেছি)


আকর্ষণীয় প্রকল্প, এটি চালিয়ে যান!
সের্গেই গোলভোচেনকো

ধন্যবাদ, এটি বেশ সুবিধাজনক :-)
দেবতারাহ্যাটগুলি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.