抱歉,我还是 Django 的新手。我想在管理站点上创建与我的模型无关的自定义视图。我已阅读文档(https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls),但不起作用。阅读一些教程也不起作用......这是我尝试过的:
管理文件
from django.contrib import admin
from django.urls import path
from .models import Question
from django.http import HttpResponse
class CustomAdminView(admin.ModelAdmin):
def get_urls(self):
urls = super().get_urls()
my_urls = [
path(r'^my_view/$', self.admin_site.admin_view(self.my_view))
]
urls = my_urls + urls
return urls
def my_view(self, request):
return HttpResponse("Hello, world.")
admin.site.register(Question)
Run Code Online (Sandbox Code Playgroud)
网址.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
admin.autodiscover()
urlpatterns = [
path(r'polls/',include('polls.urls')),
path('admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
当我去 admin/my_view 时,结果是 404 not found。
我也尝试过扩展 AdminView。
管理文件 …
我有这个结构:
每当加载比较产品时,我都想订阅服务中的对象。乍一看还好。但是,当我点击产品搜索的后退按钮,然后再次加载比较产品时,它订阅了两次。当我再次返回加载时,它被调用了3次。返回,再次加载,调用四次,依此类推。
这些是代码:
服务:
//product.service
.......
private checkedSrc = new BehaviorSubject([]);
currentChecked = this.checkedSrc.asObservable();
.......
setChecked(checked: string[]){
this.checkedSrc.next(checked);
}
resetChecked(){
this.checkedSrc.next([]);
}
.......
Run Code Online (Sandbox Code Playgroud)
产品搜索组件:
......
compare(){
this.products_valid = true;
this.productSvc.setChecked(this.checked);
this.router.navigate(['compare']);
}
......
Run Code Online (Sandbox Code Playgroud)
比较产品组件:
...
products: string[];
isLoading: boolean = true;
constructor(
private productSvc: ProductsService
) { }
ngOnInit() {
this.productSvc.currentChecked.subscribe(p => {this.products = p; console.log(this.products)})
}
Run Code Online (Sandbox Code Playgroud)
我在没有导航到比较组件的情况下尝试了它。当我第一次调用比较函数时,它订阅了一次,再次调用比较它订阅了两次,再次调用它订阅了三次,依此类推。
......
compare(){
this.products_valid = true;
this.productSvc.setChecked(this.checked);
this.productSvc.currentChecked.subscribe(p =>{console.log(p);})
}
......
Run Code Online (Sandbox Code Playgroud)
调用它的按钮:
<div class="row">
<div class="col-md-6">
<button class="btn …Run Code Online (Sandbox Code Playgroud)