কোনও জিনিসের জন্য জ্যাঙ্গো অ্যাডমিন url পাওয়া


168

জ্যাঙ্গো 1.0 এর আগে কোনও জিনিসের অ্যাডমিন url পাওয়ার সহজ উপায় ছিল এবং আমি একটি ছোট ফিল্টার লিখেছিলাম যা আমি এটির মতো ব্যবহার করব: <a href="{{ object|admin_url }}" .... > ... </a>

মূলত আমি ভিউ নামের সাথে ইউআরএল রিভার্স ফাংশনটি ব্যবহার করছিলাম 'django.contrib.admin.views.main.change_stage'

reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )

ইউআরএল পেতে।

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

আমি কীভাবে জাজানো 1.0 এ এটি করতে পারি? (বা এই বিষয়ে 1.1, যেমন আমি এসএনএন-র সর্বশেষ সংস্করণে আপডেট করার চেষ্টা করছি)।

উত্তর:


61

আমার অনুরূপ সমস্যা ছিল যেখানে আমি কল করার চেষ্টা করব reverse('admin_index')এবং ক্রমাগত django.core.urlresolvers.NoReverseMatchত্রুটি পাচ্ছিলাম ।

দেখা যাচ্ছে আমার url.py ফাইলে আমার পুরানো ফর্ম্যাট অ্যাডমিন url রয়েছে।

আমার এই urlpatterns এ ছিল:

(r'^admin/(.*)', admin.site.root),

যা অ্যাডমিনের পর্দাগুলিতে কাজ করে তবে এটি হ্রাস করার উপায়। আমার এটিতে এটি পরিবর্তন করা দরকার:

(r'^admin/', include(admin.site.urls) ),

একবার আমি এটি করি, বিপরীত প্রশাসন URL গুলি ডক্সে প্রতিশ্রুতি দেওয়া সমস্ত মঙ্গল কাজ শুরু করে।


দারুণ, মডেলএডমিনের কল না পেয়ে get_urls () পদ্ধতি নিয়ে আমার যে সমস্যাটি হয়েছিল তা হ'ল দুর্দান্ত। ধন্যবাদ!
আরনাউড

8
এই সমস্যার জন্য শ্রেষ্ঠ URL: docs.djangoproject.com/en/dev/ref/contrib/admin/...
ডিংগো

4
এই "উত্তর "টি সঠিক নয় এটি কেবলমাত্র আপনার অ্যাপ্লিকেশনে অ্যাডমিন অ্যাপ্লিকেশনটিকে কীভাবে যুক্ত করতে পারে তা দেখায় যা লেখকের একটি পৃথক সমস্যা সমাধান করেছিল। আসল প্রশ্নের আসল উত্তর নীচে - মার্কময়েটজ থেকে
ডিক্লান

এছাড়াও, আপনার কাছে মডেলটির জন্য নিবন্ধিত প্রশাসনিক ইন্টারফেস থাকা দরকার, অন্যথায় URL টি উপস্থিত থাকবে না।
ফ্লিম

412

আপনি সরাসরি কোনও টেম্পলেটে ইউআরএল রিসোলভারটি ব্যবহার করতে পারেন, আপনার নিজের ফিল্টার লেখার দরকার নেই। যেমন

{% url 'admin:index' %}

{% url 'admin:polls_choice_add' %}

{% url 'admin:polls_choice_change' choice.id %}

{% url 'admin:polls_choice_changelist' %}

রেফ: ডকুমেন্টেশন


1
মার্কময়েটজ - এটি কি কোথাও অফিসিয়াল জ্যাঙ্গো ডক্সে রয়েছে? (টেমপ্লেটগুলিতে অ্যাডমিন রিভার্স ইউআরএল কীভাবে ব্যবহার করবেন)? যদি না হয়, এটি হওয়া উচিত।
শ্যাকার

7
শ্যাকার - এটি সমস্ত ডক্সে ... ঠিক এক জায়গায় নয়। "Url" টেমপ্লেট ট্যাগটি এখানে নথিভুক্ত করা হয়েছে । "জাজানো ১.১-এ নতুন:" বিভাগে ডকগুলি বলেছেন যে নেমস্পিড ইউআরএলগুলি ভাল, এবং আপনাকে ইউআরএল নেমস্পেসের বিভাগে দেখায় । এগুলি একসাথে স্টিক করা আপনাকে টেমপ্লেটগুলিতে অ্যাডমিন অ্যাপ্লিকেশনটিকে সহজেই রেফারেন্স দেয়। এনবি আমি উত্তরটি লিখতে গিয়ে ডক্সটি অন্যরকম মনে করি।
মার্কময়েটজ

3
আপনি কী জানেন যে কীভাবে পছন্দগুলির "তালিকা" এর লিঙ্ক পাবেন? উদাহরণ: যদি "{% ইউআরএল প্রশাসক: পোলস_চয়েজ_এডড%}" / অ্যাডমিন / পোলস / পছন্দ / যোগ "দেয় তবে তার সমতুল্য কি হবে" / অ্যাডমিন / পোল / পছন্দ "?
ডারউইনসুরভিভার

2
{% URL প্রশাসন: polls_choice_changelist%} '/ অ্যাডমিন / ভোট / চয়েস' url টি ফেরৎ
Luc

35
অ্যাডমিন ইউআরএলকে বিপরীত করা বর্তমানে সম্পূর্ণরূপে এখানে ডকুমেন্ট করা হয়েছে https://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls
জোশ রুসো

101
from django.core.urlresolvers import reverse
def url_to_edit_object(obj):
  url = reverse('admin:%s_%s_change' % (obj._meta.app_label,  obj._meta.model_name),  args=[obj.id] )
  return u'<a href="%s">Edit %s</a>' % (url,  obj.__unicode__())

এটি হ্যানসেন_জে এর সমাধানের অনুরূপ যা ইউআরএল নেমস্পেসগুলি , অ্যাডমিন ব্যবহার করে : অ্যাডমিনের ডিফল্ট অ্যাপ্লিকেশন নেমস্পেস হিসাবে।


3
ধন্যবাদ, এটি সাহায্য করে। একটি জিনিস আমি পরিবর্তন করব: args=[object.pk]পরিবর্তে ব্যবহার করুন args=[object.id]। এটি আরও সাধারণ ক্ষেত্রে কভার করে, যখন প্রাথমিক কী ক্ষেত্রটির চেয়ে অন্য একটি নাম থাকে id
ডাঁটা

5
ভাল উত্তর. অবগতির জন্য আরো একটি সাম্প্রতিক জ্যাঙ্গো যে ব্যবহার করবেন object._meta.model_name করার object._meta.module_name পরিবর্তন করতে হবে
Jagu

একটি জ্যাঙ্গো নবাগত থেকে আপনাকে ধন্যবাদ। object._meta.app_labelআমাকে চূড়ান্তভাবে ডিজেঙ্গোর নিজস্ব প্রমাণীকরণ অ্যাপ্লিকেশনটির জন্য নামটি আসুক। এটা auth, উদাহরণস্বরূপ reverse(admin:auth_user_change, args=[object.id])ব্যবহারকারী পরিবর্তন পৃষ্ঠা থেকে এই
Gret

2
আপত্তি আপত্তি পরিবর্তন করতে ভুলবেন না। এই লোকটি প্রতীক হিসাবে নির্মিত একটি সংরক্ষিত লেখার কাজ শেষ করেছে।
কেভিন পার্কার

17

পরবর্তী সংস্করণগুলির জন্য আরও একটি উপায় রয়েছে, উদাহরণস্বরূপ , ১.১০ :

{% load admin_urls %}
<a href="{% url opts|admin_urlname:'add' %}">Add user</a>
<a href="{% url opts|admin_urlname:'delete' user.pk %}">Delete this user</a>

যেখানে optsকিছু mymodelinstance._metaবা মতMyModelClass._meta

একটি গ্যাচা হ'ল আপনি সরাসরি জ্যাঙ্গো টেমপ্লেটগুলিতে আন্ডারস্কোর বৈশিষ্ট্যাবলী অ্যাক্সেস করতে পারবেন না (যেমন {{ myinstance._meta }}) যাতে আপনাকে optsবস্তুটি টেমপ্লেট প্রসঙ্গে হিসাবে পাস করতে হয় ।


2
ডক্স ইউআরএল পরিবর্তন হয়েছে! দেখুন: docs.djangoproject.com/en/1.9/ref/contrib/admin/…
উইম

12

মূলত মাইক রামিরেজের জবাব হিসাবে একই, তবে স্টাইলিস্টিকগুলিতে জ্যাঙ্গো স্ট্যান্ডার্ড get_absolute_urlপদ্ধতিতে সহজ এবং কাছাকাছি :

def get_admin_url(self):
    return reverse('admin:%s_%s_change' % (self._meta.app_label, self._meta.model_name),
                   args=[self.id])

11

প্রাক 1.1 জাঙ্গোর জন্য এটি সহজ (ডিফল্ট অ্যাডমিন সাইটের উদাহরণের জন্য):

reverse('admin_%s_%s_change' % (app_label, model_name), args=(object_id,))

8
নতুন নেমস্পেসিংয়ের সাথে এটি প্রশাসক:% s_% s_ পরিবর্তন
টিবিস

3

আপনি যদি ১.০ ব্যবহার করে থাকেন তবে একটি কাস্টম টেম্পলেটট্যাগ তৈরি করার চেষ্টা করুন যা দেখতে দেখতে:

def adminpageurl(object, link=None):
    if link is None:
        link = object
    return "<a href=\"/admin/%s/%s/%d\">%s</a>" % (
        instance._meta.app_label,
        instance._meta.module_name,
        instance.id,
        link,
    )

তারপরে আপনার টেম্পলেটটিতে কেবলমাত্র {% প্রশাসকপুরি মাই_বজেক্ট% use ব্যবহার করুন (টেমপ্লেট ট্যাগটি প্রথমে লোড করতে ভুলবেন না)


1

আমি এটিকে এক্সপ্রেশনটি পরিবর্তন করে সমাধান করেছি:

reverse( 'django-admin', args=["%s/%s/%s/" % (app_label, model_name, object_id)] )

এটির জন্য / ধরে নেওয়া দরকার যে রুট ইউআরএল কনফের "অ্যাডমিন" ইউআরএল হ্যান্ডলারের একটি নাম রয়েছে, মূলত সেই নামটি "জ্যাঙ্গো-অ্যাডমিন",

যেমন রুট ইউআরএল কনফ:

url(r'^admin/(.*)', admin.site.root, name='django-admin'),

মনে হচ্ছে এটি কাজ করছে, তবে আমি এর পরিষ্কারতা সম্পর্কে নিশ্চিত নই।


2
এটি 1.0 এর জন্য কাজ করে, তবে 1.1 এর জন্য কাজ করবে না, এর আরও ভাল সমাধান রয়েছে: দেখুন অ্যালেক্স কোশ্লেভের উত্তর।
কার্ল মায়ার

আসলে আমি চেষ্টা করেছিলাম এবং এটি কাজ করে না, এবং তিনি বলেছিলেন এটি 1.0 এর জন্য, না?
হেসেন

ইউআরএল নেমস্পেসিং প্রবর্তনের সাথে সিনট্যাক্সটি 1.1 এ পরিবর্তিত হয়েছে: ডকস.ডজ্যাঙ্গোপ্রজেক্ট
এএন

-1

মডেলগুলি ব্যবহার করে এখানে আরও একটি বিকল্প রয়েছে:

একটি বেস মডেল তৈরি করুন (বা কেবল কোনও নির্দিষ্ট মডেলটিতে অ্যাডমিন_লিংক পদ্ধতি যুক্ত করুন)

class CommonModel(models.Model):
    def admin_link(self):
        if self.pk:
            return mark_safe(u'<a target="_blank" href="../../../%s/%s/%s/">%s</a>' % (self._meta.app_label,
                    self._meta.object_name.lower(), self.pk, self))
        else:
            return mark_safe(u'')
    class Meta:
        abstract = True

সেই বেস মডেল থেকে উত্তরাধিকারী

   class User(CommonModel):
        username = models.CharField(max_length=765)
        password = models.CharField(max_length=192)

এটি একটি টেমপ্লেটে ব্যবহার করুন

{{ user.admin_link }}

বা দেখুন

user.admin_link()

2
আমি মনে করি না এটি একটি ভাল সমাধান। স্ট্রিং ফর্ম্যাটিং সহ ইউআরএল তৈরি করা একটি খারাপ অভ্যাস। বিপরীত () ব্যবহার করুন।
গেটলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.